首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AsParallel().ForAll可靠吗?

AsParallel().ForAll可靠吗?
EN

Stack Overflow用户
提问于 2015-04-06 11:24:23
回答 2查看 845关注 0票数 0

我对AsParallel()进行了查询,在我的例子中,.ForAll有时跳过一些记录,有时返回空记录。

我不知道这就是原因。.Net中的并行机制可靠吗?

编辑:示例代码

代码语言:javascript
复制
var collection=.. Collection from database
var processedCollection=...
collection.Where(h => h.Id == id).AsParallel().ForAll(h =>
{
    var processedCollectionItem = ....logic to process the item
    processedCollectionItem.Where(c=>c.....).AsParallel().ForAll(c =>
    {
        //logic to process the records
    });
    processedCollection.Add(processedCollectionItem);
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-07 12:00:55

与其在并行循环中向集合添加内容,不如让框架处理构建集合。

示例:

代码语言:javascript
复制
var processedCollection = collection
    .Where(h => h.Id == id)
    .AsParallel()
    .Select(h => ProcessItem(h))
    .ToArray();

在ProcessItem中,将进行处理。平行地这样做似乎没有必要。

票数 2
EN

Stack Overflow用户

发布于 2015-04-07 11:39:25

我想processedCollection是一个不是线程安全的集合(可能是一个简单的泛型列表?)。

一个简单的解决方案是使用锁:

代码语言:javascript
复制
lock (processedCollection) // or better use a dedicated lock object
{
    processedCollection.Add(processedCollectionItem);
}

或者使用线程安全集合(如ConcurrentBag<> )。

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

https://stackoverflow.com/questions/29470303

复制
相关文章

相似问题

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