等待任务和等待ContinueWith的结果之间有区别吗?

时间:2015-02-20 18:39:32

标签: c# multithreading

即。任务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;
    }
}

1 个答案:

答案 0 :(得分:1)

使用t2,您阻止了t2的继续。 Continuations可以作为任务完成的一部分内联运行,也可以作为单独的线程池工作项运行。但这种差异并不重要。在所有情况下,一个线程将被阻塞等待。

请注意,r.Result始终返回而不会阻塞,但会在继续时阻止t2.ContinueWith(r => r.Result).Result