しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

SignalR で非同期な処理を実行する

ASP.NET MVC の場合は非同期コントローラを使っていましたが、SignalR では特に何もせずにメソッドを非同期で実行できるようになっています。

仕組みは簡単、Task/Task をメソッドの結果として返してあげるだけです。

public Task<IEnumerable<string>> GetValues()
{
    return Task.Factory.StartNew(() =>
    {
        Thread.Sleep(5000);

        return (IEnumerable<string>)new[] { "ほげほげ", "ふがふが", "はうはう" };
    });
}

5 秒待ってから値を返すメソッドです。Task を使うとコードがちょっと複雑になってしまうのが面倒ですね。

なので async/await を使ってしまいましょう。

public async Task<IEnumerable<string>> GetValues()
{
    await Task.Delay(5000);

    return new[] { "ほげほげ", "ふがふが", "はうはう" };
}

はい、これでスッキリしましたね。

実行すると 5 秒後にちゃんと値が返ってくるのが確認できます。