起初我有線程等待的例子,它的工作原理是完美的。它的任務是要求100個線程等待3秒鐘,然後使輸出:找不到並行的異步調用(多線程)
for (int i = 0; i < 100; ++i)
{
int index = i;
Thread t = new Thread(() =>
{
Caller c = new Caller();
c.DoWaitCall();
}) { IsBackground = true };
t.Start();
}
來電:: DoWaitCall()看起來像:
public void DoWaitCall()
{
Thread.Sleep(3000);
Console.WriteLine("done");
}
在這種情況下,所有的線程等待3秒鐘,並給輸出消息幾乎在同一時間。
但是,當我嘗試使用異步回調做Console.WriteLine命令:
public void DoWaitCall()
{
MyDel del =() => { Thread.Sleep(3000); };
del.BeginInvoke(CallBack, del);
}
private void CallBack(IAsyncResult r)
{
Console.WriteLine("done");
}
每個線程等待不同的時間,並使它們的輸出一個接一個緩慢。 有沒有什麼好的方法可以並行實現異步回調?
因爲沒有可用的等待版本,所以我使用異步。那麼爲什麼我的等待(非異步)程序運行良好而不設置threadPool minThreads? – demaxSH 2011-06-17 06:54:35
@demaxSH由於您手動創建100個線程,因此不使用該池。當你使用異步調用時,它在線程池中完成,線程池的線程數量有限(由MaxPoolThread定義)。所以最初你有100個線程,然後你分裂到另一個* N *線程,並等待直到* N *線程完成。 – oleksii 2011-06-17 07:03:06