かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

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になってしまいます。 暫く悩みました。