かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Taskを返すメソッドをそのままreturnして失敗した

Task HogehogeAsync()みたいなメソッドがあるとします。 そのメソッドをTask FugafugaAsync()で呼ぶときに、単発で呼ぶだけならそのままreturnしてしまいますよね。

async FugafugaAsync()
{
    return HogehogeAsync();
}

こんなノリで以下のようなメソッドでやらかしてしまいました。

async FugafugaAsync()
{
    IsProcessing = true;
    try
    {
        return HogehogeAsync();
    }
    finally
    {
        this.IsProcessing = false;
    }
}

これはawaitしないと一瞬でメソッドを抜けてしまうのでIsProcessingが一瞬でtrue→falseになってしまいます。 暫く悩みました。