アジョブジ星通信

進捗が出た頃に更新されるブログ。

.NET 3.5 でも async / await

実際需要ないと思うけど、残念ながら学校の PC は Windows 7 のほぼ初期状態に近いので、 .NET 4 なんてないし、そもそも Windows Update のアップデートが必要なレベルなので相当やばい。そんな環境で動かすアプリでも async / await 使いたいな、というときに、いいライブラリがありました!世の中やる人はやるんですね(他力本願寺

AsyncBridge.Net35

AsyncBridge とか誰でも思いつきそうな名前で、実際 NuGet で探してみると 2 つ見つかりますが、こっちです。

AsyncBridge
Adds the new C#5 async features for .NET 4 projects

AsyncBridge

.NET 4 projects とか書いてありますが、ソースにも NuGet にも 3.5 版はあります。

PM> Install-Package AsyncBridge.Net35

NuGet Gallery | AsyncBridge - Async Support for .NET 3.5 0.2.0

これを NuGet からポンと入れれば

private async void Button_Click(object sender, RoutedEventArgs e)
{
    await System.Threading.Tasks.TaskEx.Delay(TimeSpan.FromSeconds(3));
    MessageBox.Show("3 seconds have passed");
}

のように普通に await で書くことができます。

TaskEx .NET 4.5 で Task に加わったメソッドっぽいですが、このへんは Microsoft.Bcl.Async と同じかな?

ライセンス

AsyncBridge は MIT License の下で公開されています。
AsyncBridge/readme.txt at master · OmerMor/AsyncBridge · GitHub

また依存ライブラリに MicrosoftTaskParallelLibrary があります。こちらは .NET 3.5 時代の Rx の一部だったやつみたいで、昔の Rx のライセンスで公開されています。
Reactive Extensions Eula

意外と Tips 系記事でライセンスについて言及されてなくて探すのだるいときって結構ありますよね…。