[解決済み] この非同期メソッドは'await'演算子を持たないため、同期的に実行されます」という警告を気にする必要があるか?
質問
いくつかの非同期メソッドを公開するインターフェイスがあります。より具体的には、以下のいずれかを返すメソッドが定義されています。
Task
または
Task<T>
. async/awaitキーワードを使用しています。
私はこのインターフェイスを実装している最中です。しかし、これらのメソッドのいくつかで、この実装はawaitするものを持ちません。そのため、コンパイラの警告 "CS1998.This async method lacks 'await'を受けています。この非同期メソッドは 'await' 演算子を欠いており、同期的に実行されます..."。
なぜこのような警告が出るのかは理解しているのですが、このような状況で警告に対して何かすべきなのか悩んでいます。コンパイラの警告を無視するのは間違っているような気がします。
を待つことで修正できることは知っています。
Task.Run
で待つことで解決できることは知っていますが、それは安価な操作を数回行うだけのメソッドにとっては間違っているように感じます。また、実行に不必要なオーバーヘッドを追加してしまうような気もするのですが、その場合は
async
キーワードが存在するからです。
警告を無視すればよいのでしょうか、それとも私が見ていないところでこれを回避する方法があるのでしょうか。
どのように解決するのですか?
この 非同期 キーワードは単にメソッドの実装の詳細であり、メソッドのシグネチャの一部ではありません。もしある特定のメソッドの実装やオーバーライドに待ち受けるものがなければ、単に async キーワードを省略し、完了したタスクを タスク.FromResult<TResult> :
public Task<string> Foo() // public async Task<string> Foo()
{ // {
Baz(); // Baz();
return Task.FromResult("Hello"); // return "Hello";
} // }
もしあなたのメソッドが
タスク
ではなく
タスク<結果>
とすれば、任意の型と値で、完了したタスクを返すことができます。
Task.FromResult(0)
が一般的なようです。
public Task Bar() // public async Task Bar()
{ // {
Baz(); // Baz();
return Task.FromResult(0); //
} // }
また、.NET Framework 4.6以降では、以下のように タスク.CompletedTask :
public Task Bar() // public async Task Bar()
{ // {
Baz(); // Baz();
return Task.CompletedTask; //
} // }
関連
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み] 非同期Task<T>メソッドを同期的に実行するにはどうしたらいいですか?
-
[解決済み】非同期プログラミングとマルチスレッドの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】パラメータ付きRedirectToAction
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。