我正在尝试在 while 循环内使用 TPL,并且需要将一些值传递给任务,然后这些值会更改为循环。例如,这里显示了一个索引递增的示例(必须在请求创建任务的行之后):
int index = 0;
Task[] tasks;
while(/*condition*/)
{
tasks[index] = Task.Factory.StartNew(() => DoJob(index));
index++;
}
但它当然不起作用,因为索引值可以在任务开始之前递增。一个可能的解决方案可能是还传递一个 WaitHandle,在增加索引之前等待,并且必须将其发送到 DoJob 方法,但在我看来这并不是一个很好的解决方案。还有其他想法吗?
将值分配给循环内的临时变量:
int index = 0;
Task[] tasks;
while(/*condition*/)
{
int value = index;
tasks[index] = Task.Factory.StartNew(() => DoJob(value));
index++;
}
这样每个任务都会有自己的值副本index
在迭代期间有while
循环调用StartNew
被做了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)