【发布时间】:2016-05-27 18:24:07
【问题描述】:
我编写这段代码是为了使用并行处理:
var charge = new Charge[Job.Jobs.Length];
for (int i = 0; i < Job.Jobs.Length; i++)
{
charge[i] = new Charge
{
ID = Convert.ToInt64(Job.Jobs[i].Parameters),
Job = new SystemJob { ID = Job.Jobs[i].ID, Type = Job.Type },
};
var status = charge[i].GetSubscribeInformation();
if (status == false)
continue;
Task.Run(() => charge[i].Subscribe());
//before task runs, the i value changes and causes error.
}
问题是在Task.Run(() => charge[i].Subscribe()); 执行之前i 值发生变化并导致错误。我怎样才能避免这种情况?
我可以等到Task.Run() 之后,但这似乎不是一个好主意。我有什么选择?
【问题讨论】:
-
你考虑过使用
Parallel.ForEach- msdn.microsoft.com/en-us/library/dd460720%28v=vs.110%29.aspx -
我从未听说过。你能解释一下吗?
-
查看我评论中的链接
标签: c# .net multithreading wcf parallel-processing