这不是“如何在没有等待的情况下在 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 // ... }
已更新 ,由于原始接受的答案已被编辑,我已将接受的答案更改为使用C# 7.0discards的答案,因为我认为ContinueWith这里不合适。每当我需要记录即发即弃操作的异常时,我都会使用Stephen Cleary 在此处提出的更精细的方法。
ContinueWith
使用 C# 7,您现在可以使用discards:
_ = WorkAsync();