首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我对Parallel.ForEach做了什么错事

我对Parallel.ForEach做了什么错事
EN

Stack Overflow用户
提问于 2018-07-17 21:48:17
回答 1查看 164关注 0票数 1

下面是Parallel.ForEach在C#中的代码

代码语言:javascript
复制
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处理“、”2处理“、”3处理“、”4处理“、”5处理“、”6处理“。但是,实际上只处理了一些项目!

你知道密码出了什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-17 21:52:33

finally不对集合中的每个项运行该操作。如果您想对集合中的每个项执行某些操作,这就是主体的作用所在。init并最终用于每个工作线程的初始化和拆卸。因此,您的打印文件告诉您,在处理您的项目时使用了三个线程。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51390668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档