async わかんにゃい。ConfigureAwait してない非同期メソッドを Wait で待つと固まるん? ASPNET 特有?
2015-04-30 21:30:26@aetos382 基本的には最後までawaitで通すのが筋という設計思想なのだと思います。すると大抵はWindows FormかWPFかHttpHandlerに行き着くのでSynchronizationContextを戻すのがデフォということかと
2015-04-30 21:42:38@chocolamint スライドにもありますが、フレームワークの都合上、どうしても同期処理しないといけないところもありますのでね。
2015-04-30 21:44:00同期コンテキストを拾う必要のある処理の方が少ないんだから、デフォルトで ConfigureAwait(false) にしとけばいいのににゃあ。ノイズ感がすごい。それとも、遅くても安全な方を取ってるんかな。
2015-04-30 21:32:14メソッドの途中で ConfigureAwait 切り換えることは少ないと思うんで、メソッドの属性か何かで規定値を設定させて欲しいの。
2015-04-30 21:35:21ライブラリはfalse基本でアプリケーションはtrue基本ですからねえ < ConfigureAwait。どっちかに振らなきゃいけないんなら、どっちに振るべきかはそこそこ自明。
2015-04-30 21:40:45ConfigureAwait(true) がデフォルトなの絶対「安全」だなんて認めないからな!実行時に一発で例外になる方が絶対安全だからな!!!!
2015-04-30 21:43:19@xin9le ライブラリ側でConfigureAwait(false)しておいて、そのメソッドの戻り値のTaskをUI側でawaitした場合って継続はUIスレッドにポストされるんですっけ?
2015-04-30 21:46:42@chocolamint どのスレッドにポストされるかはawaitを書いたメソッド単位で決まると認識していますー。なので、その例の場合はちゃんとUIスレッドにポストされるはずです。
2015-04-30 21:48:24@chocolamint その通りです。ライブラリ、サーバー側、それらUIに関わらないところすべてでConfigureAwait(false)になります。これを短く書く方法がないので辛いですね。僕はStay()というメソッドにしてラップしています。
2015-04-30 21:50:34意識せずに同期と同じように非同期を扱える、って売り文句からするとConfigureAwait(true)がデフォルトなの致しかたない気はする
2015-04-30 21:50:41@xin9le なるほど。勉強になります。ありがとうございます。めとべやでneueccせんせの発表聞いた頃はまだデッドロックする理屈を理解するので精一杯だったので…ようやくわかってきました
2015-04-30 21:58:36ASP.NET で非同期 (Async) を乗りこなす - 松崎 剛 Blog - Site Home - MSDN Blogs blogs.msdn.com/b/tsmatsuz/arc…
2015-04-30 21:58:48