WCF - поток на сервере, чтобы быстрее выпустить клиент - PullRequest
0 голосов
/ 10 апреля 2019

Когда функция вызывает сервер, файл загружается и сохраняется в папке. Затем файл должен быть обработан, что займет некоторое время и приведет к тайм-ауту клиента.

Чтобы обойти это, я подумал, что, поместив обработку файла в отдельный поток, чтобы подпрограмма могла вернуться к клиенту после загрузки файла. И обработка файла будет продолжаться в фоновом режиме.

К сожалению, поток останавливает возврат. Я не понимаю, с чем у меня проблема. Я думал, что с помощью потока это позволит подпрограмме завершить и вернуться к клиенту.

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» занимает значительное количество времени, и при использовании вышеприведенного кодирования подпрограмма ожидает завершения функции, прежде чем вернуться .....

1 Ответ

0 голосов
/ 11 апреля 2019

oThread.Join() вызывает блокировку вашего основного потока до завершения oThread. Просто удалите эту строку кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...