私のシナリオは、クラスライブラリにラップされた.NET4.5クライアントによって呼び出される.NET4.0WCFサービスで構成されています。
クライアントはWCFサービスを非同期で呼び出し、返されたデータを表示します。そのコードはかなり標準的なものであり、次のようになります。
Private m_Service As WcfService = Nothing
Public Event GetDataComplete As GetEventHandler
Public Sub GetData(bytes As Byte())
m_Service = New WcfService()
AddHandler m_Service.GetWcfDataComplete, AddressOf Service_GetWcfDataComplete
m_Service.GetWcfData(bytes)
End Sub
Private Sub Service_GetWcfDataComplete(sender As Object, e As WcfService.GetWcfDataCompletedEventArgs)
' Process results from server...
' Signal completion.
RaiseEvent GetDataComplete(Me, New GetEventArgs(New DataItem(e.Result)))
End Sub
WCFサービスは返されるデータを64kチャンクに制限するため、すべてがダウンロードされるまで、サービスを複数回呼び出す必要があります。また、' Process results from server...
返されたデータでUIを更新する処理も行います。予想通り、これはUIスレッドに恐ろしいことをします。
したがって、タイトルの質問-複数の非同期WCF呼び出しの完了を待機する単一のバックグラウンドスレッドを作成するにはどうすればよいですか?
私が試したが失敗したこと:
- パターンを使用し
Async/Await
ます。Visual Studioによると、バイト配列は待機できません。私はそれから自分の道をハックする方法がわかりません。 - を使用し
BackgroundWorker
ます。このアプローチを使用すると、プロセスの終了を通知する方法がわかりません。DoWorkEventArgs
WCF呼び出しはコールバックを使用するため、 WCFサービス呼び出しが戻ったときにアクセスできなくなりました。