1. ホーム
  2. c#

[解決済み] 警告 CS4014」を抑制する。この呼び出しは待機されていないため、現在のメソッドの実行は続行されます... "

2022-04-13 04:36:55

質問

との重複はありません。 C#でawaitを使わずに非同期メソッドを安全に呼び出すにはどうしたらいいですか? .

以下の警告をきれいに消すにはどうしたらいいですか?

警告 CS4014: この呼び出しは待ち受けされていないため、呼び出しが完了する前に現在のメソッドの実行が続行されます。呼び出しの結果に対して 'await' 演算子を適用することを検討してください。

簡単な例です。

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
    // ...
}

更新情報 を使用するようになったので オリジナルの回答 が編集されたので、受理された回答を C#7.0を使用したものは破棄されます。 とは思えないので ContinueWith はここでは適切です。fire-and-forget操作の例外を記録する必要があるときは、私はもっと手の込んだ方法を用います。 Stephen Clearyが提案したものです。 .

解決方法は?

C# 7 では 廃棄物 :

_ = WorkAsync();