一般的な関数を使用して wcf サービス呼び出しを実行しています - 以下を参照してください。私は正しいことをしていることを確認したいだけです:
最も重要な要件は、サービス コールを別のスレッドで実行する必要があることです。最初はBackgroundworkerを考えてから使用することにし
Threading.Task
たので、それは簡単
Task.Factory.StartNew(Function() functionToCall.Invoke(serv))
ですか?
そして結果を得るresult = t.Result
私が行う場合の違いは何ですか:
Dim t1 As New Task(Of Object)(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