我正在使用通用函数来执行 wcf 服务调用 - 请参见下文。我只是想确保我在做正确的事情:
最重要的要求是服务调用应该在单独的线程中执行。最初我想到了Backgroundworker,然后决定使用
Threading.Task
它,那么简单
Task.Factory.StartNew(Function() functionToCall.Invoke(serv))
吗?
并得到结果result = t.Result
如果我这样做有什么区别:
将 t1 作为新任务(对象)(Function()functionToCall.Invoke(serv))
t1.Start()
结果= t1.Result我应该考虑
Parallel
吗?我错过了什么重要的事情吗?
编辑:此功能在客户端解决方案的 ServiceProxy 项目中
Private Function ServiceCall(ByVal functionToCall As ServiceDelegate(Of IEmpService)) As Object
Dim channel As New ChannelFactory(Of IEmpService)(_endPoint)
Dim serv As IEmpService
Dim result As Object = Nothing
serv = channel.CreateChannel()
Try
Dim t As Task(Of Object) = Task.Factory.StartNew(Function() functionToCall.Invoke(serv))
result = t.Result
Catch exp As Exception
CustomLog.Detail(exp)
Finally
If channel.State = CommunicationState.Faulted Then
channel.Abort()
Else
channel.Close()
End If
End Try
Return result
End Function