假设我有这个代码:
public class MyAsyncHandler : IHttpAsyncHandler
{
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
{
MyAsynchOperation asynch = new MyAsynchOperation(cb, context, extraData);
asynch.StartAsyncWork();
return asynch;
}
//...
现在,如果MyAsynchOperation
是一个 IO 操作,所以它可能有内部方法(APM),BeginFOO/EndFOO
其中没有绑定线程。
当操作完成时,来自线程池的一个新的/相同的线程(通过完成端口)正在处理响应。
一切都好。
但让我想知道的一件事是它IAsyncResult
有这个属性:
System.Threading.WaitHandle AsyncWaitHandle { get; }
我熟悉WaitHadnle
它有一种方法来阻止当前线程。
一个线程通过调用(例如)在旋转栅门处等待或阻塞。WaitOne
所以这是我的问题:
问题 #1
- 假设
MyAsynchOperation
将APM 用于 IO,如果没有阻塞/绑定线程,如何使用(用于什么) ?waitHAndle
问题2
- 假设
MyAsynchOperation
不使用 APM,它只是我的内部调用的实现new Thread().start(do some calculation)
,我稍后会调用AsyncCallback's
Callback
----waithandle
这里会阻塞线程吗?