我有一個C# ASP.NET MVC
項目。
我基本上正在運行一個模擬(有取消選項)和整理結果。
我需要使用multi-threading
,因爲我可以同時運行一百萬或更多的模擬。
我的代碼是這樣的:Parallel.For循環與線程局部變量
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
對象每次迭代?我讀了this msdn的文章,但我不明白。每個線程的每個對象可能有1個。