避免使用不受支持的即发即弃异步虚拟方法或委派AsyncFixer03



我在Visual Studio 2022 中收到此错误

避免不受支持的即发即弃异步虚拟方法或委托。未处理的异常将使进程崩溃。

很难找到这方面的任何信息。代码100%正常工作,但如果可以的话,我希望在不禁用它的情况下避免这个错误。代码行沿着这些术语。

Parallel.ForEach(things, async (thing) => await ProcessThing(thing));

感谢theodor为我指出了这里详细解决的底层代码问题使用异步lambda 的并行foreach

简单的答案是,你不太可能通过向Parallel.ForEach提供异步lambda来启动一堆后台任务,然后继续主线程。它会解雇他们,然后继续主线程,很可能无法完成你想要的所有工作。长话短说Paralell.ForEach+async=坏,试试别的。visual studio在这里的错误是检测到即发即弃,但指出与此相关的风险将非常有帮助,例如无法完成工作以及可能在稍后的主线程上使进程崩溃。下面是我选择的,因为这是从旧到新最直接的简单变化。

var options = new ParallelOptions {
MaxDegreeOfParallelism = 10,
CancellationToken = CancellationToken.None
};
await Parallel.ForEachAsync(things, options, async (thing, cancellationToken) => await ProcessThing(thing));

可能有助于此点击的是查看每个";等待";单词as,到此为止,因为原始版本(Paralell.ForEach(缺少它只是在创建每个任务后继续,而不是等待它们完成。

最新更新