サービス関数を呼び出すためのWCF非同期begin endパターンがあります。私はタスクの中にラップされたbegin関数を持っています。タスクが待たれているとき、begin関数に渡されるコールバック関数が終了するのを待つことはありません。コールバック関数の実行が完了するのを待たせるにはどうすればよいですか?ありがとうございました。WCF非同期コールバック関数でタスクを待機させる方法は?
これは私が持っているものです。
Public Sub Process(pCase)
Dim client As CaseRecord.CaseRecordPort
client = New CaseRecord.CaseRecordPortClient
DirectCast(client, CaseRecord.CaseRecordPortClient).Open()
Dim clientTask As Task = Task.Factory.StartNew(Sub()
client.BeginCaseProcess(pCase, AddressOf CaseRequestCompleted, client)
End Sub)
clientTask.Wait()
If IsPaid() Then
End If
End Sub
Private Sub CaseRequestCompleted(ByVal result As IAsyncResult)
Dim client As CaseRecord.CaseRecordPortClient = DirectCast(result.AsyncState, CaseRecord.CaseRecordPortClient)
Dim tCaseResponse As CaseResponse = Nothing
Dim sError As String = ""
Try
tCaseResponse = client.EndCaseProcess(result)
Catch ex As TimeoutException
sError = "Timeout error"
Catch ex As Exception
sError = ex.Message
Finally
RaiseEvent CaseRequestCompleted(tCaseResponse, sError)
End Try
End Sub
Visual Studio 2013+(私も2012も同様です)では、Begin/Endメソッドの代わりに* Tasks *を使用してプロキシを生成できます。おそらく最も簡単な解決策は、タスクベースのメソッドを生成するためにプロキシを再構築することです。 –