データを返すために複数のWebサービスを呼び出す必要があるASP.NETページがあります。これらのリクエストを並行して実行したいのですが、PageAsyncTaskクラスを使用するのが最も適切な方法のようです。秘訣は、A、B、C、D、Eなどの5つの呼び出しがあることです。呼び出しAとBは、CとDと同様に、順番に行う必要があります。ABペア、CDペア、およびEはすべて実行できます。並行して。
PageAsyncTaskコンストラクターの「executeInParallel」パラメーターを使用して5つのタスクを作成し、この並列/順次構成を取得できるようには見えません。
3つのタスクを作成してみましたが、そのうち2つは非同期呼び出しを連鎖させています( http://msdn.microsoft.com/en-us/library/dwba7yy7(VS.80).aspxと同様)。PageAsyncTaskのコンテキストでこれを実行しようとすると、end関数を1回しか呼び出せないことを示すエラーが発生します。PageAsyncTaskが使用する関数のペアで3つの関数の連鎖セットをラップしようとしましたが、その結果、end関数が呼び出されることはありません(したがってタイムアウト)。
これを行う良い方法はありますか?
編集:それが便利な場合は、これが私が試みているコードの簡略化されたバージョンであり、end関数は1回しか呼び出せないというエラーが表示されます。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim objMB As New BusObject.AsyncTasks(AddressOf dummy)
Dim objTask As New PageAsyncTask(AddressOf objMB.BeginStartSession, AddressOf objMB.EndGetList, Nothing, Nothing, True)
RegisterAsyncTask(objTask)
Dim i As Integer = 0
End Sub
Public Class BusObject
Public Class AsyncState
Public SecondCallback As AsyncCallback
End Class
Public Class AsyncTasks
Dim fn_Callback As PageCallback
Public Delegate Sub PageCallback(ByVal objData As Object)
Public Sub New(ByVal fnCallback As PageCallback)
fn_Callback = fnCallback
End Sub
Public Function BeginStartSession(ByVal sender As Object, ByVal e As EventArgs, ByVal cb As AsyncCallback, ByVal extraData As Object) As IAsyncResult
Dim objWS As New com.WebService
Dim objX As New AsyncState
objX.SecondCallback = cb
Return objWS.BeginWSFunction1("param1", "param2", AddressOf EndStartSession, objX)
End Function
Public Sub EndStartSession(ByVal objAsyncResult As IAsyncResult)
Dim objWS As New com.WebService
Dim strSessionKey As String = objWS.EndWSFunction1(objAsyncResult)
Dim objState As AsyncState = objAsyncResult.AsyncState
objWS.BeginWSFunction2("p1", "p2", "p3", "p4", "p5", strSessionKey, True, objState.SecondCallback, objState)
End Sub
Public Sub EndGetList(ByVal objState As IAsyncResult)
Dim objWS As New com.WebService
Dim objResult As com.WebService.Result = objWS.EndWSFunction2(objState)
Dim lstReturn As New List(Of BusObject)
fn_Callback(lstReturn)
End Sub
End Class
End Class