[過去ログ]
ふらっと C#,C♯,C#(初心者用) Part138 (1002レス)
ふらっと C#,C♯,C#(初心者用) Part138 http://mevius.5ch.net/test/read.cgi/tech/1528194762/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
161: デフォルトの名無しさん (ワッチョイ 0699-pByW) [sage] 2018/06/16(土) 13:59:46.72 ID:VCIrJNT80 await Task.Run(()=>やりたいこと) で済ますのはどうなんだろ。 http://mevius.5ch.net/test/read.cgi/tech/1528194762/161
162: デフォルトの名無しさん (アウアウウー Saa5-l11B) [sage] 2018/06/16(土) 14:16:04.53 ID:Ws4rvThPa >>161 無駄にスレッド消費するしマルチスレッドによる不要なトラブルを持ち込む可能性もある最低最悪の方法 awaitを外したくないなら await Task.CompletedTask の方がクリーン http://mevius.5ch.net/test/read.cgi/tech/1528194762/162
163: デフォルトの名無しさん (ワッチョイ c251-G00F) [sage] 2018/06/16(土) 14:42:27.67 ID:omCaDuHT0 >>161 レスありがとうございます。せっかくなのですが、私もその方法はあまり良くないと思います。 ご存知でしたら失礼を許していただきたいのですが、以下の2つの効果は同じではないのです。 async Task X() => Thread.Sleep(1000); async Task Y() => await Task.Run(() => Thread.Sleep(1000)); >>162 確かに await Task.CompletedTask をどこかに挟むだけなら 変な副作用もなさそうですね。 ただ、警告を抑制するためだけに意味のないコードを加えるのは正しくないように思います。 私がそんなコードを見たら、await Task.Yield() のような効果を期待しているのかなと 誤解してしまいそうです。 (もちろん、 await Task.CompletedTask を勧めてくださっているわけではなく、 「await を外したくないなら」という無理のある前提に合わせて話してくださっていることは 理解しています) http://mevius.5ch.net/test/read.cgi/tech/1528194762/163
204: デフォルトの名無しさん (ワッチョイ c251-G00F) [sage] 2018/06/18(月) 18:39:23.10 ID:rGsHjxJX0 >>196 > むしろ、async Task Hoge() { } がタスク戻さないのにコンパイル通ることのほうが問題じゃね > つかほんとにこれ警告だけで通って正常に動くの? > そのときHoge()で何が帰ってきてるんだ? 確かに一見すると不思議ですよね。 このあたりの詳しい話は TaskAwaiter で検索するとお知りいただけると思います。 >>197 >>201 > await Task.CompletedTask >>162 に書いていただいていることを仰っているのだと思いますが、 >>162 は >>161 の方法の不味さを説明するために await Task.CompletedTask を 引き合いに出されただけで、実際にこの方法を推奨されているわけではないと思います。 私自身も、async Task Hoge() { } と Task Hoge() => Task.CompletedTask; は それぞれメリットがあるのに対して sync Task Hoge() => await Task.CompletedTask; は すべての面で上 2 つに劣っていると考えておりますが、いかがでしょうか。 >>198 > 最適化してCompletedTaskでも返すのかなとも思ったけど > IL見ると他と同じようにコード生成して実行してんね 大変ためになる情報をどうもありがとうございます。 私も確認してみましたが、async Task Hoge() { } と Task Hoge() => Task.CompletedTask; との間にこれだけ IL のコードに差があると 前者を使うのは躊躇してしまいますね。そもそも私は > このオーバーヘッドが必要な処理 になる状況が分からず、CompletedTask を返すように最適化が行われるべきだと思うのですが、 「await なしの async」と「CompletedTask 返し」との間の違いに気づいていらっしゃるようであれば ぜひお教えいただけないでしょうか。 http://mevius.5ch.net/test/read.cgi/tech/1528194762/204
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.028s