[過去ログ]
ふらっと C#,C♯,C#(初心者用) Part138 (1002レス)
ふらっと C#,C♯,C#(初心者用) Part138 http://mevius.5ch.net/test/read.cgi/tech/1528194762/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
157: デフォルトの名無しさん (ワッチョイ c251-G00F) [sage] 2018/06/16(土) 12:20:07.70 ID:omCaDuHT0 教えてください。 戻り値が async Task のメソッドで await を使わないと↓のような警告が出ます。 > CS1998 この非同期メソッドには 'await' 演算子がないため、同期的に実行されます。 > 'await' 演算子を使用して非ブロッキング API 呼び出しを待機するか、'await Task.Run(...)' を > 使用してバックグラウンドのスレッドに対して CPU 主体の処理を実行することを検討してください。 独立したメソッドなら、await が必要ないなら async Task をやめて void にすればいいのですが、 仮想呼び出しなどの関係で戻り値を変更したくない場合の解決策に悩んでいます。 とりあえず、 [1] 警告を抑制する [2] async だけ外して Task.CompletedTask を返す という二つの解決策を思いついたのですが、どちらも到底正しい方法とは思えません。 いいアイディアがあれば教えてもらえると嬉しいです。 http://mevius.5ch.net/test/read.cgi/tech/1528194762/157
160: デフォルトの名無しさん (ワッチョイ c251-G00F) [sage] 2018/06/16(土) 13:16:07.05 ID:omCaDuHT0 >>158 レスありがとうございます。やはり他に正しい方法はないのですね。 非同期が必要になるまでは同期実行できるのが async の効果だと思っていたので 非同期が全く必要ないときに async が使えないのは逆のような気がして 違和感が拭えないのですが、とりあえず [2] の方法でやっていこうと思います。 >>159 申し訳ないのですが、同期ついて理解不足で仰っていることが理解できないので もう少し詳しく説明していただけないでしょうか。 http://mevius.5ch.net/test/read.cgi/tech/1528194762/160
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
165: デフォルトの名無しさん (ワッチョイ c251-G00F) [sage] 2018/06/16(土) 15:23:38.22 ID:omCaDuHT0 >>164 レスありがとうございます。 たかが警告を消すために実際のコードを書き換える必要があるのかという考えは 実にごもっともだと思います。 ただその場合、警告を抑制するだけでも意図は十分に伝わると思うのですが、 やはり警告はそのままにしてコメントなどで説明を行うべきなのでしょうか。 http://mevius.5ch.net/test/read.cgi/tech/1528194762/165
167: デフォルトの名無しさん (ワッチョイ c251-G00F) [sage] 2018/06/16(土) 15:35:00.89 ID:omCaDuHT0 >>166 レスありがとうございます。やはり警告の抑制も選択肢になりますよね。 警告を抑制することに対する考え方は人それぞれということもあると思いますので、 その都度状況に応じた対処法を考えるのが一番でしょうか。 > っていうか、asyncなしで問題ない前提なら最初から何も悩む必要ないと思うんだけど... 申し訳ありません。これについてよく意味が理解できませんでした。 詳しくご説明していただけないでしょうか。 http://mevius.5ch.net/test/read.cgi/tech/1528194762/167
171: デフォルトの名無しさん (ワッチョイ c251-G00F) [sage] 2018/06/16(土) 17:13:04.67 ID:omCaDuHT0 >>167 ご説明ありがとうございます。 >>166 で仰っていた意味が理解できました。 async/await は糖衣構文なので確かにベースクラスなどで使用が強制されることはありませんが、 深く考えずに使えるところが糖衣構文のいいところですし、 async を使うメソッドに XxxAsync という名前をつけることが推奨されていることからも、 事実上 async/await を使うかどうかはベースクラスに依存していると言っていいと思います。 これを踏まえて、改めて >>166 にお返事したいと思います。 > っていうか、asyncなしで問題ない前提なら最初から何も悩む必要ないと思うんだけど... 文法上は async なしでも問題ありませんが、コードの一貫性を考えると async を意図した メソッドのオーバーライドで async なしは問題だと思います。 それにもかかわらず、たまたま実装上 await を全く使わなかっただけで async の使用をとがめるような警告が表示されてしまうので悩んでいるのです。 >>169 レスありがとうございます。他の方のご意見も聞かせていただいて、 やはりこの警告は不適切で、警告を解くことだけに注意を向ければいいように感じてきています。 それに対して異論を唱えてくださっているようなのですが、勉強不足で仰っていることが よく理解できていないので、申し訳ないのですが詳しく説明していただけないでしょうか。 http://mevius.5ch.net/test/read.cgi/tech/1528194762/171
172: デフォルトの名無しさん (ワッチョイ c251-G00F) [sage] 2018/06/16(土) 17:18:42.84 ID:omCaDuHT0 >>170 レスどうもありがとうございます。 このような返しばかりで情けないのですが、理解力が足りず仰っていることがよくわかりませんでした。 申し訳ありませんが詳しいご説明をお願いできないでしょうか。 http://mevius.5ch.net/test/read.cgi/tech/1528194762/172
175: デフォルトの名無しさん (ワッチョイ c251-G00F) [sage] 2018/06/16(土) 21:30:40.09 ID:omCaDuHT0 >>173 レスどうもありがとうございます。 同期処理と非同期処理の違いは、一般論としてはおっしゃるとおりだと思うのですが、 それが >>174 でご指摘いただいているような目的を達成する上で障害になっていて、 そのような問題を解消するために async/await 構文が作られたのではないでしょうか。 だとすると、同期処理と非同期処理の違いを理由に await なしの async を 否定することは本末転倒のように感じてしまうのですがいかがでしょうか。 >>174 ご説明どうもありがとうございます。 具体例を含めてとてもわかりやすく感じたのでこのレスの前半で引用させていただきました。 私にはこれだけ要領よく説明することはできそうにないので助かりました。 http://mevius.5ch.net/test/read.cgi/tech/1528194762/175
177: デフォルトの名無しさん (ワッチョイ c251-G00F) [sage] 2018/06/16(土) 22:10:42.86 ID:omCaDuHT0 >>176 メイン処理を止めたくないならポーリングやコールバックを明示的に記述する以外に 選択肢がないというように読めてしまったのですが、この部分に間違いはないでしょうか。 もしそうなら async/await 構文についてあまりお詳しくないようにお見受けしますので、 よろしければ一度お触りになってみてください。 非同期処理の大変さをご存知であればこそ、便利さを実感できるのではないかと思います。 (ちなみに、今の問題は非同期処理を行うことも可能なメソッドをオーバーライドする際に 非同期処理を全く使わないと警告が出てしまうということですので、 何かに妥協してメイン処理を止めるというわけではありません) http://mevius.5ch.net/test/read.cgi/tech/1528194762/177
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.032s