在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/

10-12 17:00