Vaz*_*aze 2 c# parallel-processing concurrency multithreading asp.net-mvc-4
我正在用C#开发一个MVC4网站.ConcurrentBag在将所有内容传递给视图之前,以下代码应该使用项填充(DisplayModels).
Parallel.ForEach(model.Products, p =>
{
model.DisplayModels.Add(new DisplayBoardModel()
{
Market = model.Market,
Product = p
});
});
return View(model);
Run Code Online (Sandbox Code Playgroud)
我发现在任何给定的执行中,DisplayModels似乎被填充到不同的点.好像ForEach在每个后台任务返回之前完成.
我Parallel.ForEach对它的理解是,它并行处理每个项目,但仍然阻止了调用线程,直到完成所有工作.这不正确吗?
在模型准备好之前,我还应该做些什么来阻止动作返回吗?使用正常foreach工作正常
该Parallel.ForEach()工作正常,并完成预期的一次.
但是你model.DisplayModels.Add()可能不是线程安全的.你用的是什么系列?
您可以通过以下方法解决此问题:a)使用DisplayModel的Concurrent集合或b)将ForEach转换为PLINQ查询.但是,除非DisplayBoardModel()一些繁重的CPU工作(并且ctor通常不工作),否则没有必要使这种并行.
所以,只需使用一个简单的 foreach()
每个DisplayBoardModel发出一个数据库请求
所以这是一个潜在的原因.每个Db操作都会创建自己的Connection(Context)吗?是否有机会忽略异常?
| 归档时间: |
|
| 查看次数: |
595 次 |
| 最近记录: |