10

为什么await不允许在一个finally块中?

public async void Fn()
{
    try
    {
    }
    finally
    {
        await Task.Delay(4000);
    }
}

知道可以Awaiter手动获取

public void Fn()
{
    try
    {
    }
    finally
    {
        var awaiter = Task.Delay(4000).GetAwaiter();
     }
}
4

1 回答 1

13

摘自:我在哪里不能使用“等待”?

在 catch 或 finally 块内。您可以在 try 块内使用“await”,无论它是否具有关联的 catch 或 finally 块,但您不能在 catch 或 finally 块内使用它。 这样做会破坏 CLR 异常处理的语义。

这在 C# 6.0 中显然不再适用

取自:AC# 6.0 语言预览

C# 6.0 消除了这个缺陷,现在允许在 catch 和 finally 块中调用 await(它们已经在 try 块中得到支持)

于 2013-02-01T12:53:28.380 回答