これは、「待機せずにC#で非同期メソッドを安全に呼び出す方法」の複製ではありません。
次の警告を適切に抑制するにはどうすればよいですか?
警告CS4014:この呼び出しは待機されていないため、現在のメソッドの実行は、呼び出しが完了する前に続行されます。呼び出しの結果に「待機」演算子を適用することを検討してください。
簡単な例:
static async Task WorkAsync()
{
await Task.Delay(1000);
Console.WriteLine("Done!");
}
static async Task StartWorkAsync()
{
WorkAsync(); // I want fire-and-forget
// more unrelated async/await stuff here, e.g.:
// ...
await Task.Delay(2000);
}
私が試したが好きではなかったもの:
static async Task StartWorkAsync()
{
#pragma warning disable 4014
WorkAsync(); // I want fire-and-forget here
#pragma warning restore 4014
// ...
}
static async Task StartWorkAsync()
{
var ignoreMe = WorkAsync(); // I want fire-and-forget here
// ...
}
更新、元の承認された回答が編集されたため、ContinueWith
ここでは適切ではないと思うので、承認された回答をC#7.0破棄を使用するものに変更しました。ファイアアンドフォーゲット操作の例外をログに記録する必要があるときはいつでも、Stephen Clearyが提案したより精巧なアプローチを使用します。
async void
。
#pragma
は良くないと思いますか?