【发布时间】:2009-10-24 00:12:02
【问题描述】:
我在我的一些项目中使用异步方法,我喜欢它,因为它使我的应用程序更具可扩展性。但是,我想知道异步方法如何在后台真正工作? .NET(或 Windows?)如何知道调用已完成?根据我进行的异步调用的数量,我可以看到创建了新线程(尽管并非总是如此……)。为什么?
此外,我想监控完成请求需要多长时间。为了测试这个概念,我编写了以下代码,它异步调用 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,等等)。如何使用异步方法监控调用的实际持续时间(从请求真正执行到结束的那一刻)?
更新:异步方法会阻塞流程吗?我知道它使用 .NET ThreadPool,但是 IAsyncResult 如何知道调用已完成,是时候调用 CallBack 方法了?
【问题讨论】:
-
1. ThreadPool, 2. 查看 ThreadPool 如何工作的详细信息,但我认为您想要的东西不可能以通用的方式实现。 msdn.microsoft.com/en-us/library/ms973903.aspx
标签: c# .net-3.5 asynchronous