我在 Visual Studio 2022 中收到此错误
Avoid unsupported fire-and-forget async-void methods or delegates. Unhandled exceptions will crash the process.
很难找到任何相关内容。该代码工作 100% 正常,但我希望避免此错误而不禁用它(如果可以的话)。代码行符合这些条款。
Parallel.ForEach(things, async (thing) => await ProcessThing(thing));
最佳答案
感谢 theodor 为我指出了此处详细解决的底层代码问题 Parallel foreach with asynchronous lambda
简单的答案是,您不太可能打算通过向 Parallel.ForEach 提供异步 lambda 来启动一堆后台任务,然后继续主线程。它会关闭它们,然后继续主线程,可能不会完成您想要的所有工作。长话短说Paralell.ForEach + async = Bad,尝试其他方法。这里 Visual Studio 的错误是检测到“即发即弃”,但指出与此相关的风险确实很有帮助,例如未完成工作以及可能在主线程上稍后导致进程崩溃。 下面是我选择的,因为这是从旧到新的最直接简单的改变。
var options = new ParallelOptions {
MaxDegreeOfParallelism = 10,
CancellationToken = CancellationToken.None
};
await Parallel.ForEachAsync(things, options, async (thing, cancellationToken) => await ProcessThing(thing));
可能有助于此点击的是将每个“等待”单词视为,停在这里直到完成,原始版本 (Paralell.ForEach) 缺乏它在创建每个任务后简单地继续而不是等待它们完成。
关于c# - 避免不受支持的即发即忘异步方法或委托(delegate) AsyncFixer03,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73663775/