ConfigureAwait

ConfigureAwait関連の会話
3
あえとす @aetos382

async わかんにゃい。ConfigureAwait してない非同期メソッドを Wait で待つと固まるん? ASPNET 特有?

2015-04-30 21:30:26
あえとす @aetos382

@chocolamint そのようですね。29ページからのやつですね。そのまんまですね。

2015-04-30 21:40:32
しゃるしぃ @chocolamint

@aetos382 基本的には最後までawaitで通すのが筋という設計思想なのだと思います。すると大抵はWindows FormかWPFかHttpHandlerに行き着くのでSynchronizationContextを戻すのがデフォということかと

2015-04-30 21:42:38
あえとす @aetos382

@chocolamint スライドにもありますが、フレームワークの都合上、どうしても同期処理しないといけないところもありますのでね。

2015-04-30 21:44:00
あえとす @aetos382

同期コンテキストを拾う必要のある処理の方が少ないんだから、デフォルトで ConfigureAwait(false) にしとけばいいのににゃあ。ノイズ感がすごい。それとも、遅くても安全な方を取ってるんかな。

2015-04-30 21:32:14
あえとす @aetos382

メソッドの途中で ConfigureAwait 切り換えることは少ないと思うんで、メソッドの属性か何かで規定値を設定させて欲しいの。

2015-04-30 21:35:21
Takekazu Omi @takekazuomi

@aetos382 安全側に振ってるのかなという気がします。

2015-04-30 21:37:46
あえとす @aetos382

@takekazuomi Wait を使うのが例外的状況だということですかね。

2015-04-30 21:42:27
Takekazu Omi @takekazuomi

@aetos382 UIで使うのが暗黙の前提になってる気もしますね

2015-04-30 21:47:20
しゃるしぃ @chocolamint

await利用経験少ないからConfigureAwait地獄をそんなに味わってないマン 子アクションはツラみだけど

2015-04-30 21:38:44
neuecc @neuecc

ライブラリはfalse基本でアプリケーションはtrue基本ですからねえ < ConfigureAwait。どっちかに振らなきゃいけないんなら、どっちに振るべきかはそこそこ自明。

2015-04-30 21:40:45
どちらともいえない @azyobuzin

ConfigureAwait(true) がデフォルトなの絶対「安全」だなんて認めないからな!実行時に一発で例外になる方が絶対安全だからな!!!!

2015-04-30 21:43:19
しゃるしぃ @chocolamint

ふむぅ…まだ俺の理解が足りないようだ… twitter.com/neuecc/status/…

2015-04-30 21:44:12
じんぐる (Takaaki Suzuki) @xin9le

@chocolamint そうしないとアプリケーション側で不意にデッドロックしたりしますからねー。

2015-04-30 21:45:15
しゃるしぃ @chocolamint

@xin9le ライブラリ側でConfigureAwait(false)しておいて、そのメソッドの戻り値のTaskをUI側でawaitした場合って継続はUIスレッドにポストされるんですっけ?

2015-04-30 21:46:42
じんぐる (Takaaki Suzuki) @xin9le

@chocolamint どのスレッドにポストされるかはawaitを書いたメソッド単位で決まると認識していますー。なので、その例の場合はちゃんとUIスレッドにポストされるはずです。

2015-04-30 21:48:24
しゃるしぃ @chocolamint

@xin9le なるほど…確かにそうすると殆どは基本falseですねぇ…

2015-04-30 21:48:50
しゃるしぃ @chocolamint

ConfigureAwaitは地獄…覚えましたし

2015-04-30 21:49:14
じんぐる (Takaaki Suzuki) @xin9le

@chocolamint その通りです。ライブラリ、サーバー側、それらUIに関わらないところすべてでConfigureAwait(false)になります。これを短く書く方法がないので辛いですね。僕はStay()というメソッドにしてラップしています。

2015-04-30 21:50:34
くっきー @nk9k

意識せずに同期と同じように非同期を扱える、って売り文句からするとConfigureAwait(true)がデフォルトなの致しかたない気はする

2015-04-30 21:50:41
Takekazu Omi @takekazuomi

ライブラリとアプリで切り分けるのか、利用コンテキストで切り替えたいような気がする。

2015-04-30 21:52:41
しゃるしぃ @chocolamint

@xin9le なるほど。勉強になります。ありがとうございます。めとべやでneueccせんせの発表聞いた頃はまだデッドロックする理屈を理解するので精一杯だったので…ようやくわかってきました

2015-04-30 21:58:36
あえとす @aetos382

ASP.NET で非同期 (Async) を乗りこなす - 松崎 剛 Blog - Site Home - MSDN Blogs blogs.msdn.com/b/tsmatsuz/arc…

2015-04-30 21:58:48