【发布时间】:2018-11-14 20:30:51
【问题描述】:
我必须并行化现有代码。基本上,代码获取一个文件,对其进行处理并将结果保存在一个新文件中。我需要对一批文件进行这项工作。
所以,我做了这个示例代码来查看我需要什么代码结构,但它的工作方式很奇怪:
class Program
{
static void Main(string[] args)
{
Processor processor = null;
ProcessAsync(processor, 3);
}
static void ProcessAsync(Processor processor, int n)
{
IList<Task> tasks = new List<Task>();
for (int i = 0; i < n; ++i)
{
processor = new Processor(i);
tasks.Add(new Task(() => processor.Process()));
tasks[i].Start();
}
for (int i = 0; i < n; ++i)
{
tasks[i].Wait();
}
}
}
class Processor
{
private readonly int id;
public Processor(int id)
{
this.id = id;
}
public void Process()
{
Console.WriteLine(id.ToString("000") + ": " + "Processing...");
Thread.Sleep(1000);
Console.WriteLine(id.ToString("000") + ": " + "Processed!");
}
}
我期望这个输出:
Task 000: Processing...
Task 001: Processing...
Task 002: Processing...
Task 000: Processed!
Task 001: Processed!
Task 002: Processed!
但我有这个结果:
Task 002: Processing...
Task 002: Processing...
Task 002: Processing...
Task 002: Processed!
Task 002: Processed!
Task 002: Processed!
为什么processor的ids都是002?
【问题讨论】:
-
那是老经典,叫'capturing the loop var'
标签: c# .net task multitasking