即。任务1和任务2如何阻止,它们是否以与线程池相同的方式进行交互?
class Program
{
static void Main(string[] args)
{
var t1 = Task.Run<int>(() => GiveMeAOne());
var t2 = Task.Run<int>(() => GiveMeAOne());
t1.Wait();
Debug.WriteLine(t1.Result);
Debug.WriteLine(t2.ContinueWith(r => r.Result).Result);
}
public static int GiveMeAOne()
{
return 1;
}
}
答案 0 :(得分:1)
使用t2
,您阻止了t2
的继续。 Continuations可以作为任务完成的一部分内联运行,也可以作为单独的线程池工作项运行。但这种差异并不重要。在所有情况下,一个线程将被阻塞等待。
请注意,r.Result
始终返回而不会阻塞,但会在继续时阻止t2.ContinueWith(r => r.Result).Result
。