しばやん雑記

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

非同期に対応した Nancy のベータ版を使ってみた

既に ASP.NET MVC / Web API / SignalR では一般的となったタスクベースの非同期処理ですが、Nancy も MyGet で公開されているベータ版では対応しているようだったので試してみました。

詳しい使い方は GitHub の Wiki に書いてあります。

Async Beta · NancyFx/Nancy Wiki · GitHub

このベータ版は NuGet ではなくて MyGet を使って公開されているので、Visual Studio 側でパッケージソースとして追加する必要があります。

f:id:shiba-yan:20130616234241p:plain

一度設定してしまえば、あとは NuGet と同じように管理できます。

f:id:shiba-yan:20130616234359p:plain

プレリリース版として登録されてるので、プレリリース版を含める設定になっているか確認しないと悩むことになります。

使い方としては、ラムダ式にも async / await を使えるので簡単です。仕方ない気はするんですが、非同期で処理を行うためにはオーバーロードされたインデクサを使う必要があるのがちょっとダサい気がします。

// 2 つめの引数に true を指定すると非同期になる
Get["/", true] = async (x, ct) =>
{
    await Task.Delay(1000);

    return 200;
};

別にオーバーロード使わなくても、戻り値の型が Task か Task の場合は自動的に非同期になってくれたらなぁと思います。

それは良いとして、Nancy でタスクベースの非同期が使えるようになったので、簡単にアクションの中で HttpClient や Entity Framework 6 といった非同期に対応したクラスが使えるようになりました。

ちなみに、既にサイドバーに表示している人気記事は、この Nancy の非同期対応版と HttpClient を使うように修正したサービスを使って表示しています。