我的场景包含一个 .NET 4.0 WCF 服务,由包装在类库中的 .NET 4.5 客户端调用。
客户端异步调用 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
. 使用这种方法,我无法弄清楚如何发出进程结束的信号。因为 WCF 调用使用回调,所以我不再有权访问DoWorkEventArgs
WCF 服务调用何时返回。