EDIT 2014.2.15 今見るとasync/awaitで例外処理がまるでできない的に書いていますが、これは悪い例ですので。こような記事Async/Await - 非同期プログラミングのベスト プラクティス参照してください。
asyncメソッドの外側で例外がキャッチできません。
static void Main(string[] args) { try { FuncAsync(); Console.ReadLine(); } catch (InvalidOperationException e) { Console.WriteLine(e);//ここでキャッチできない! } } static async void FuncAsync() { throw new InvalidOperationException("例外FuncAsync!"); int r = await Task.Run<int>(() => Worker()); } static int Worker() { return 99; }
上のように書いたMain()のtry/catchでは例外をキャッチできず、未処理例外になってしまいます。
これまた、落とし穴になりがちですな。
MSDNとかでもasyncメソッド内の例外が呼び出し側で素直にキャッチできないことは、あまり書いてないような。
async/awaitの便利さは確かにわかるのですが、トリッキーな仕組みの上に成り立ってることでもあるので、もうちょっと副作用とかも周知徹底してほしいものです。