かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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