繁体   English   中英

如何在循环中创建一堆任务

[英]How do I create a bunch of tasks in a loop

我有100个值的清单

我想产生5个线程来分别处理20个

我的代码基本上是

for (int i = 0; i<5; i++)
{

   Task.Run(() => {
       myMethod(myList.Skip(i * 20).Take(20)));
   });
}

显然,因为这关闭了i的值,所以它可以完全搞定它。 我已经尽力想尽一切办法来在声明任务时获取其价值,但是我一点也没有运气。 甚至将Task.Run的第一行设置为var localVariable = i; localVariable var localVariable = i; 要捕获它不起作用,它将运行该方法,并且每次都为5。

我该怎么做,想必我想通过传入i的值来创建任务,因此它永远不会出现在函数之外,但是我不知道该怎么做。

有任何想法吗?

您已经快到了,但是除了创建局部变量的副本之外,您还需要在lambda表达式中使用它:

for (int i = 0; i < 5; i++)
{
   int localCopy = i;
   Task.Run(() => {
       myMethod(myList.Skip(localCopy * 20).Take(20)));
   });
}

如果那不起作用,那么问题就不在于变量捕获-而是在其他地方。

当然,另一个选择是将Parallel.ForEach与自定义分区程序结合使用。 换句话说,很可能有更好的方法来解决该问题。

尝试在任务外设置var localVariable = i

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM