我在C#中使用Parallel.ForEach使用以下代码

internal class Program
{
    private static void Main(string[] args)
    {
        var recordList = new List<string> {"1", "two", "three", "four", "five", "six"};

        var result = new ConcurrentBag<ProcessedData>();

        Parallel.ForEach<string, ProcessedData>(recordList, () => null //local init
            , (record, state, index, localInit) => //body
            {
                Console.WriteLine($"Processing {record}");
                var integerValue = record.Length;
                var processedString = record + " Processed";

                localInit = new ProcessedData
                {
                    IntegerValue = integerValue,
                    StringValue = processedString
                };

                return localInit;
            }, bodyResult => //local finally
            {
                Console.WriteLine($"Adding {bodyResult.StringValue}");
                result.Add(bodyResult);
            });


        foreach (var item in result)
        {
            Console.WriteLine($"{item.StringValue}");
        }

        Console.ReadLine();
    }

    private sealed class ProcessedData
    {
        internal int IntegerValue { get; set; }
        internal string StringValue { get; set; }
    }


当我运行程序时,我希望控制台能打印出
“ 1个已处理”,“两个已处理”,“三个已处理”,“四个已处理”,“五个已处理”,“六个已处理”。但是,只处理了一些项目!

c# - 我用Parallel.ForEach做错了什么-LMLPHP

您知道代码出了什么问题吗?

最佳答案

最后,不会对集合中的每个项目都运行该操作。如果要对集合中的每个项目执行某些操作,这就是主体的作用。 init最终用于初始化和拆除每个工作线程。因此,您的打印输出告诉您在处理项目时使用了三个线程。

09-12 23:20