是等待使用TaskContinuationOptions.AttachedToParent选项创建延续吗?

时间:2013-01-11 21:25:56

标签: c# .net async-await

  

可能重复:   Is Async await keyword equivalent to a ContinueWith lambda?

编辑:

我看到这个问题被标记为重复,但它并不完全相同。我特别询问await是否相当于ContinueWith IN CONJUNCTION WITH TaskContinuationOptions.AttachedToParent

这是(在异步方法体内)

    await SomeMethodAsync();

    Console.WriteLine("hi");

相当于

    Task.ContinueWith(delegate() {

        Console.WriteLine("hi");

    }, TaskContinuationOptions.AttachedToParent);

}

我在谷歌上找到的唯一答案是这些并不等同,但我不相信,因为 -

在第一个示例中,async方法体一旦到达第一个await就将Task返回给用户,如果任务没有等待子任务(因为AttachedToParent选项),那么它将已经完成。

我的理智取决于这种情况。

我在Google上找到的答案就在这里 http://social.msdn.microsoft.com/Forums/en-US/async/thread/bec2151a-abfd-43b9-a2e0-ffe34ae481f6/

1 个答案:

答案 0 :(得分:0)

所以Stephen Toub显然是一位权威人士......

我做了一些测试,现在我看到为什么await不需要用AttachedToParent来创建它的延续。

这是因为这个

await SomeMethodAsync();

正在接收延续的结果,然后父任务从中断处继续