私がこのコードを持っているとしましょう:
public class MyAsyncHandler : IHttpAsyncHandler
{
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
{
MyAsynchOperation asynch = new MyAsynchOperation(cb, context, extraData);
asynch.StartAsyncWork();
return asynch;
}
//...
さて、 ifは IO 操作なので、スレッドを結び付けていないMyAsynchOperation
内部メソッド (APM) がある可能性があります。BeginFOO/EndFOO
操作が終了すると、スレッド プールからの新しい/同じスレッドが (完了ポートを介して) 応答を処理します。
大丈夫。
しかし、私が不思議に思うことの 1 つは、次のIAsyncResult
プロパティがあることです。
System.Threading.WaitHandle AsyncWaitHandle { get; }
現在のスレッドをブロックWaitHadnle
するメソッドがあることはよく知っています。
スレッドは、回転式改札口で(たとえば)を呼び出して待機またはブロックします。WaitOne
そして、ここに私の質問があります:
質問1
- IO に APM を使用していると仮定すると、スレッドのブロック/タイイングがない場合、
MyAsynchOperation
どのように(何のために) 使用されていますか?waitHAndle
質問2
- APMを使用してい
MyAsynchOperation
ないと仮定すると、new Thread().start(do some calculation)
後で呼び出す内部的に呼び出すのは私の実装だけですAsyncCallback's
Callback
----waithandle
ここでスレッドをブロックしますか?