2011-07-07 7 views
1

私はaspxページでIOバインド操作を行うためにRegisterAsyncTaskを使用しています。私は同じことに関して2つの質問があります。IsCompleted RegisterasyncTaskの同期化

1)OnBeginEventでIO操作を実行し、BeginfXXX retrunを同期的に実行するとどうなりますか(IAsyncResult.CompletedSynchronouslt = true)。 OnEndハンドラが呼び出されますか?

模擬IAsyncResult実装を作成してテストしましたが、OnEndハンドラが呼び出されず、ページのレンダリングも完了していないようです(timeoutイベントが発生するまで)。そのような場合には何をすべきか?

2)問題は最初のものと一直線になります。私の非同期タスクを登録してみましょう。 ONBeginハンドラでは、いくつかの事前手順を実行し、事前検証に応じて、Onbeginイベントから戻るだけです。 OnBeginEventHandlerからnull IAsyncResult(またはmock)を返して返すことは可能ですか?私は上記の同じアプローチを使ってみましたが、うまくいかないようです。

すべてのヘルプは

おかげ

を理解されるであろうクナル

+0

誰もがこれについて考えている? – Kunal

答えて

0

1)それはあなたのbeginメソッドを実装する方法によって異なります。呼び出し元が呼び出されているコールバックに依存する可能性があるため、操作を同期的に完了したかどうかにかかわらず、コールバックを呼び出すことができなければなりません。

2)いいえ、有効なIAsyncResultを返す必要があります。 BeginXXXメソッドから返す値がある場合は、それを保存し、コールバックを呼び出してEndXXXメソッドから返し、有効なIAsyncResultオブジェクトをBeginXXXメソッドから返す必要があります。

Jeffrey Richterの非同期列挙子は、開始/終了パターンを非常に簡単に実装するのに役立ちます。あなたはこれを見てください:http://msdn.microsoft.com/en-us/magazine/cc546608.aspx