起初我有线程等待的例子,它的工作原理是完美的。它的任务是要求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