0


请看下面的代码。

for (int j = 0; j < 500000; j++)  
{  
    Console.WriteLine(j);  

    // Call BeginInvoke with last two parameters as null  

    IAsyncResult asyncRes = dlg.BeginInvoke(j, 4, ref refString, out outString, progressCallBack, null);   
}  

如果异步调用的方法休眠 5 分钟。那么创建 5 个 lac 线程是否正确?

谢谢。

4

1 回答 1

4

这通常是不正确的。当您调用BeginInvoke委托时,您正在排队执行异步方法。

.NET线程池将根据需要处理的工作项队列并以最大吞吐量为目标来决定何时以及如何执行您的方法,但它肯定不会并行运行 500000 个线程。

当我以 5 分钟的睡眠和委托中的一条小控制台消息尝试您的示例时,最初只有 8 个线程在运行,然后慢慢地有更多线程流入。

有关线程池和异步委托的详细说明,请阅读这篇文章

于 2011-01-11T04:33:37.250 回答