【发布时间】:2014-02-24 20:11:46
【问题描述】:
我有一个C# ASP.NET MVC 项目。
我基本上是在运行模拟(可以选择取消)并整理结果。
我需要使用multi-threading,因为我一次可以运行一百万个或更多模拟。
我的代码是这样的:
public class MyClass
{
private ConcurrentBag<StuffResult> StuffResults { get; set; }
private bool CancellationRequested { get; set; }
public void DoAlotOfStuff(int numberOfStuffToDo)
{
var cancellationTokenSource = new CancellationTokenSource();
var options = new ParallelOptions { CancellationToken = cancellationTokenSource.Token };
Task.Factory.StartNew(() =>
{
if (CancellationRequested) cancellationTokenSource.Cancel();
});
try
{
Parallel.For(0, numberOfStuffToDo, options, a =>
{
options.CancellationToken.ThrowIfCancellationRequested();
var class1 = new Class1();
var class2 = new Class2();
var class3 = new Class3();
var class4 = new Class4(class1, class2, class3);
var result = class4.DoStuff();
StuffResults.Add(result);
});
}
catch (OperationCanceledException e)
{
//handle exception
}
}
}
问题:如何避免每次迭代都实例化一个新的Class1、Class2、Class3 和Class4 对象?我读了thismsdn 的文章,但我不明白。每个线程可能每个对象 1 个。
【问题讨论】:
标签: c# asp.net-mvc multithreading parallel-extensions