使用Parallel.ForEachAsync报参数转换、委托参数不匹配错误如何解决
报错原因
两个报错的核心诱因是Parallel.ForEachAsync的回调委托参数不匹配,编译器无法找到对应重载,触发了连锁报错:
- 你使用的
ForEachAsync重载要求回调签名为Func<迭代元素类型, CancellationToken, ValueTask>,必须传入两个参数,你只写了1个OrderNumber参数,所以触发委托参数不匹配错误 - 由于找不到正确重载,编译器尝试匹配其他重载,误将第二个参数
ParallelOptions识别为需要转换为CancellationToken,因此抛出参数转换错误
另外你定义ParallelOptions时对象初始化器语法有误,属性赋值后多写了分号。
修正方案
你需要修改两处核心内容:
- 修正
ParallelOptions初始化的语法错误,去掉属性赋值后的多余分号 - 给回调委托添加第二个
CancellationToken参数,匹配方法要求的签名 - 补充原方法要求的
List<DisplayDto>返回值逻辑(当前代码无return语句会额外报错)
修正后的完整代码:
public async Task<List<DisplayDto>> GetData() { var options = new ParallelOptions() { MaxDegreeOfParallelism = 20 }; await Parallel.ForEachAsync(result, options, async (OrderNumber, cancellationToken) => { // 业务逻辑写在这里,内部异步调用建议传入cancellationToken配合取消逻辑 }); // 补充你自己的返回值逻辑,示例: // return 你的结果集合; }
内容的提问来源于stack exchange,提问作者Doctor Ford
相关产品推荐
相关产品推荐

