我在我的一些项目中使用异步方法,我喜欢它,因为它允许我的应用程序具有更多的可伸缩性。但是,我想知道异步方法在后台真正起作用吗? .NET(或Windows?)如何知道呼叫已完成?根据我所做的异步调用的数量,我可以看到创建了新线程(并不总是......)。为什么?异步方法在C#中如何工作?
此外,我想监视一个请求需要多长时间才能完成。为了测试这个概念,我编写了下面的代码,该代码异步调用Web服务并在启动秒表后立即调用。
for (int i = 0; i < 10000; i++)
{
myWebService.BeginMyMethod(new MyRequest(), result, new AsyncCallback(callback), i);
stopWatches[i].Start();
}
// Call back stop the stopwatch after calling EndMyMethod
这并不工作,因为所有的请求(10000)具有相同的开始时间和持续时间将直线上升(称之为0 = 1时长,通话1 = 2的持续时间等)。我如何使用异步方法(从请求真正执行到结束的那一刻)监视实际的呼叫持续时间?
UPDATE:是否异步方法阻塞流动?我知道它使用.NET ThreadPool
,但IAsyncResult
如何知道呼叫已完成,是时候调用CallBack
方法了?
1. ThreadPool,2.查看有关ThreadPool如何工作的详细信息,但我不认为通过一般方式可以实现您想要的功能。 http://msdn.microsoft.com/en-us/library/ms973903.aspx – 2009-10-24 00:17:57