使用 Parallel.ForEachAsync

Doc*_*ord 19 c# parallel-processing asynchronous parallel.foreachasync

我正在尝试运行 a Parallel.ForEachAsync(),但出现以下两个错误:

错误 1:
参数 2:无法从 System.Threading.Tasks.ParallelOptions 转换为 System.Threading.CancellationToken
错误 2:
Delegate Func<WC, CancellationToken, ValueTask> 不采用 1 个参数

这是我的代码:

public async Task<List<DisplayDto>> GetData()
{
    var options = new ParallelOptions()
    {
        MaxDegreeOfParallelism = 20;
    };

    await Parallel.ForEachAsync(result, options, async OrderNumber => {
        //Do Stuff here. 
    });
}
Run Code Online (Sandbox Code Playgroud)

为了使其按照我的要求工作,必须改变什么?

Gur*_*ron 34

Parallel.ForEachAsync期望Func<TSource, CancellationToken, ValueTask> 接受 2 个参数(第一个参数是集合的元素,第二个参数是 - CancellationToken),而不是一个。用法可以如下所示:

public async Task<List<DisplayDto>> GetData()
{
    var options = new ParallelOptions()
    {
        MaxDegreeOfParallelism = 20
    };

    await Parallel.ForEachAsync(result, options, async (OrderNumber, ct) => {
        // do not forget to use CancellationToken (ct) where appropriate 
        // Do Stuff here. 
    });
 }
Run Code Online (Sandbox Code Playgroud)

例子

也很有用 - .NET 6 Parallel.ForEachAsync 中需要两个取消令牌?

  • 感谢您提供的示例 - 我的第一反应是实际上没有任何东西使用令牌,但我确实看到异常确实导致它指示取消。这肯定证实了 MS 文档对我来说不清楚,但希望这串评论对其他人有帮助:) (3认同)