使用TaskCompletionSource而不是Task.Run()有什么好处

时间:2019-07-01 07:56:38

标签: c# .net clr

我的课本说:

TaskCompletionSource非常适合I / O绑定工作:您可以在不影响线程的情况下获得任务的所有好处。

我很困惑,如果我们使用Task.Run(new Action(TimeConsumingIOFunction)),将有一个辅助工作线程来处理TimeConsumingIOFunction,主线程将不会被阻塞,所以为什么教科书强调TaskCompletionSource具有以下优点:没有阻止线程?

例如:

class Program
{
    static void Main(string[] args)
    {
        //executed by main thread
        Task.Run(new Action(TimeConsumingIOFunction));
        Console.WriteLine("non blocked");
        Console.ReadLine();
    }

    static void TimeConsumingIOFunction()
    {
        // executed by worker thread
        Thread.Sleep(5000); //simulate a IO bound operation
    }
}

主线程未被阻塞?

编辑:

有人告诉我工作线程仍然被阻止,那么如何使用TaskCompletionSource来使工作线程不被阻止?

0 个答案:

没有答案