c# - 避免不受支持的即发即忘异步方法或委托(delegate) AsyncFixer03

标签 c# asynchronous async-await visual-studio-2022 parallel.foreach

我在 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/

相关文章:

c# - 如何使用 c# winforms 填充第三方应用程序的文本框?

c# - 从 HttpClient SendAsync 请求获取响应时出现无法解释的超时和延迟

c# - 从 C#/WCF 使用 Java 服务 - 数组仅对编码的 SOAP 有效

c# - Web API 只允许单个异步任务

java - 为什么 RxJava 在异步处理时只使用约 10 个线程?

swift - 如何在 Swift 中对委托(delegate)方法的异步调用进行单元测试?

c# - 没有 Task<T> 方法的异步等待

Python async redis 给出错误 AttributeError : __aexit__

c# - 在文本框中显示列表<String> (Winforms)

c# - 对象在 -z 和 -x 角的 z 轴上翻转 180 度