WCF - 服务器线程以更快地向客户端发布

WCF - Threading at server to release to the client quicker

当一个函数被调用到服务器时,文件被上传并存储在一个文件夹中。然后必须处理该文件,这需要一些时间来完成并且会导致客户端超时。

为了解决这个问题,我在考虑通过将文件的处理放在一个单独的线程中以允许子例程在文件上传后 return 到客户端。并且文件的处理将在后台继续。

不幸的是,线程正在停止 return。我不明白我有什么问题。我认为通过使用线程,它可以让子例程完成并 return 到客户端。

Public Sub RestoreToOps(rFileInfo As RemoteFileInfo) Implements IRestore.RestoreToOps
    Dim oLogItem As New LogItem
    Dim sDestinationFolder As String = My.Settings.DestinationFolder
    Try
        Dim sFileDestination As String = Path.Combine(sDestinationFolder, rFileInfo.FileName)
        If File.Exists(sFileDestination) Then
            File.Delete(sFileDestination)
        End If
        Using fs As FileStream = New FileStream(sFileDestination, FileMode.Create, FileAccess.Write, FileShare.Read)
            fs.Write(rFileInfo.FileBytes, 0, rFileInfo.FileBytes.Length)
        End Using
        ProcessFile(rFileInfo.FileName)
    Catch ex As Exception
        'Error Handling
    End Try
End Sub

'*************************************************************************

Private Function ProcessFile(ByVal FileName As String) As Boolean
    Dim oThread As Thread = Nothing
    Dim oObject As Object = Nothing
    Dim oLogItem As New LogItem
    Dim sDBName As String = ""
    Dim bSuccess As Boolean = False
    Try
        If InStr(FileName, "Move.zip") > 0 Then
            sDBName = Replace(FileName, "Move.zip", "")
            oThread = New Thread(New ParameterizedThreadStart(AddressOf MakeRestoreFromObject))
            oThread.IsBackground = True
            oThread.Start(sDBName)
            oThread.Join()
        End If
    Catch ex As Exception
        'Error Handling
    End Try
    Return bSuccess
End Function

函数 "MakeRestoreFromObject" 需要相当长的时间,当使用上面的代码时,子例程会等待函数完成,然后 returning.....

oThread.Join() 导致您的主线程阻塞,直到 oThread 完成。只需删除那行代码即可。