【发布时间】:2020-05-26 09:06:19
【问题描述】:
我正在读取一个文件,想一次处理 10 行。
这仅在我处理
请指教。
下面是我的代码:
private void btnStart_Click(object sender, EventArgs e)
{
int lctr = 0;
var tasks = new List<Task>();
foreach (string s in lines)
{
if (string.IsNullOrWhiteSpace(s) || string.IsNullOrEmpty(s))
continue;
lctr++;
tasks = new List<Task>();
if (lctr < 11)
{
Console.WriteLine(lctr + " - " + s);
tasks.Add(Task.Factory.StartNew(() => processThis(s)));
}
else
{
Console.WriteLine("Waiting ...");
Task.WaitAll(tasks.ToArray());
}
}
if (tasks.Count > 0)
Task.WaitAll(tasks.ToArray());
}
【问题讨论】:
-
tasks在您对其进行WaitAll时将始终为空,因为您在if之前为它重新分配了一个空列表。 -
此外,您还需要在每批 10 个之后重置
lctr,否则您将永远不会再次进入lctr < 11条件。 -
你为什么要在这里使用任务?没有任何异步发生。
processThis是异步的吗? -
你到底想做什么?并行处理一批 10 个项目?为什么要在批次之间等待?
-
两个问题:您正在为每个 linge 重置任务,并且您没有每 10 行将 lctr 设置为零。
标签: c# asynchronous foreach task wait