エラーの原因
async 修飾子は、そのメソッド(関数)が非同期であることを指定します。メソッド中にタスクの待機処理(await)がない場合 async 修飾子を指定する意味が無いため、エラーが発生します。警告の発生するコード例
// CS1998 この非同期メソッドには 'await' 演算子がないため、同期的に実行されます。
async Task<int> testAsync()
{
return 100;
}
エラーメッセージ
CS1998 この非同期メソッドには 'await' 演算子がないため、同期的に実行されます。
'await' 演算子を使用して非ブロッキング API 呼び出しを待機するか、
'await Task.Run(...)' を使用してバックグラウンドのスレッドに対して
CPU 主体の処理を実行することを検討してください。

解決方法1 async を削除する。
async を削除し、Task<xxx> を xxx に変更します。プログラムの構成上 async を削除できない場合は 解決方法2 を参照してください。修正前のコード
async Task<int> testAsync()
{
return 100;
}
修正後のコード
// async を削除し、Task<int> を int にする。
int testAsync()
{
return 100;
}
解決方法2 Task.CompletedTask メソッドで正常終了のタスクを生成し、非同期実行する。
メソッド(関数)内に次の1文を追加します。return の前であればどこでも構いません。// 次の1文を追加
await Task.CompletedTask;
// デッドロックを防止したい場合はこちら
await Task.CompletedTask.ConfigureAwait(false);
修正後のコード
// Task.CompletedTask で正常終了のタスクを生成し、非同期実行する。
async Task<int> testAsync()
{
await Task.CompletedTask.ConfigureAwait(false);
return 100;
}
解決方法3 Task.FromResult メソッドでタスクを生成し、非同期実行する。
return 行を次のように修正します。// Task.FromResult で Task を生成し、await実行。
return await Task.FromResult(戻り値);
// デッドロックを防止したい場合はこちら
return await Task.FromResult(戻り値).ConfigureAwait(false);
修正後のコード
// Task.FromResult で Task を生成し、非同期実行する。
async Task<int> testAsync()
{
return await Task.FromResult(100).ConfigureAwait(false);
}
戻り値の型が void の場合、次の記事を参照してください。
C# - await で「CS4008 void を待機することができません」エラーが発生する。検証環境
- .NET 5.0
- Microsoft Visual Studio Professional 2019 Version 16.11.2
- Microsoft Windows 10 Pro Version 21H2 OS Build 19044.1415 Experience: Windows Feature Experience Pack 120.2212.3920.0