既に ASP.NET MVC / Web API / SignalR では一般的となったタスクベースの非同期処理ですが、Nancy も MyGet で公開されているベータ版では対応しているようだったので試してみました。
詳しい使い方は GitHub の Wiki に書いてあります。
Async Beta · NancyFx/Nancy Wiki · GitHub
このベータ版は NuGet ではなくて MyGet を使って公開されているので、Visual Studio 側でパッケージソースとして追加する必要があります。
一度設定してしまえば、あとは NuGet と同じように管理できます。
プレリリース版として登録されてるので、プレリリース版を含める設定になっているか確認しないと悩むことになります。
使い方としては、ラムダ式にも async / await を使えるので簡単です。仕方ない気はするんですが、非同期で処理を行うためにはオーバーロードされたインデクサを使う必要があるのがちょっとダサい気がします。
// 2 つめの引数に true を指定すると非同期になる Get["/", true] = async (x, ct) => { await Task.Delay(1000); return 200; };
別にオーバーロード使わなくても、戻り値の型が Task か Task
それは良いとして、Nancy でタスクベースの非同期が使えるようになったので、簡単にアクションの中で HttpClient や Entity Framework 6 といった非同期に対応したクラスが使えるようになりました。
ちなみに、既にサイドバーに表示している人気記事は、この Nancy の非同期対応版と HttpClient を使うように修正したサービスを使って表示しています。