我的课本说:
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来使工作线程不被阻止?