所以我得到了一个像这样的TAP
private async void btn_Start_Click(object sender, EventArgs e)
{
var progress = new Progress<string>(s => textBox1.Text += s);
await Task.Factory.StartNew(() => WebHelper.GetPosts(progress,cities[cityidx].link,categories[categoryidx].link,GetCurrentDistrict()),
TaskCreationOptions.LongRunning);
label1.Text = "completed";
}
现在,如果我想一次执行多个任务,应该将代码放入for循环中吗?或者,还有更好的方法?
最佳答案
实际上,我的第一个建议是使用 Task.Run
而不是 Task.Factory.StartNew
,因为它是较新的版本,并且包含更多的recommended,尽管StartNew
具有更多配置选项。
接下来,您只需调用 Task.WhenAll
来释放前台线程,即可完成所有任务:
var tasks = new List<Task>();
for (int i = 0; i < 10; i++)
{
int ind = i; // copy trick to not get always 10 as output
tasks.Add(Task.Run(() =>
{
Console.WriteLine(ind);
}));
}
await Task.WhenAll(tasks);
正如@PeterBons明智地注意到的那样,一旦单击按钮,请考虑禁用(或忽略通过诸如
IsProcessing
之类的状态变量继续执行的逻辑),直到操作完成以逃避多次用户单击为止。
关于c# - TAP的多任务处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63576578/