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

引用元:「await」はどこで使用できませんか?

キャッチの内側または最後にブロックします。キャッチブロックまたはfinallyブロックが関連付けられているかどうかに関係なく、tryブロック内で「await」を使用できますが、catchブロックまたはfinallyブロック内で使用することはできません。 これを行うと、CLR例外処理のセマンティクスが混乱します。

これは明らかにC#6.0ではもはや真実ではありません

取得元:AC#6.0言語プレビュー

C#6.0はこの欠陥を解消し、catchブロックとfinallyブロックの両方で待機呼び出しを許可するようになりました(これらはtryブロックですでにサポートされていました)

于 2013-02-01T12:53:28.380 に答える