在C#中的Func委托(delegate)(或与此相关的Action委托(delegate))上调用BeginInvoke方法时,运行时是否使用ThreadPool或生成新线程?
我几乎可以肯定它会使用ThreadPool,因为这样做是合乎逻辑的,但是如果有人可以确认这一点,我将不胜感激。
谢谢,
最佳答案
它肯定使用线程池。
如果我仍然能找到记录的文档,我会感到震惊,请注意... this MSDN article指示您指定的任何回调将在线程池线程上执行...
这是一些代码来确认它-但是当然并不能确定它会以这种方式发生...
using System;
using System.Threading;
public class Test
{
static void Main()
{
Action x = () =>
Console.WriteLine(Thread.CurrentThread.IsThreadPoolThread);
x(); // Synchronous; prints False
x.BeginInvoke(null, null); // On the thread-pool thread; prints True
Thread.Sleep(500); // Let the previous call finish
}
}
编辑:正如下面的Jeff所链接,this MSDN article确认了这一点:
关于c# - Func <T> .BeginInvoke是否使用ThreadPool?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3556634/