C# 使用TAP进行多任务处理

C# 使用TAP进行多任务处理,c#,.net,multithreading,asynchronous,async-await,C#,.net,Multithreading,Asynchronous,Async Await,所以我有一个这样的水龙头 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,categor

所以我有一个这样的水龙头

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";
}
private async void btn\u Start\u单击(对象发送方,事件参数e)
{
var progress=新进度(s=>textBox1.Text+=s);
等待Task.Factory.StartNew(()=>WebHelper.GetPosts(进度,城市[cityidx]。链接,类别[categoryidx]。链接,GetCurrentDistrict()),
TaskCreationOptions.LongRunning);
label1.Text=“已完成”;
}

现在,如果我想同时有多个任务,我应该把代码放在for循环中吗?或者有更好的方法吗?

实际上,我在这里的第一个建议是使用,而不是,因为它是一个更新的版本,而且有更多的版本,尽管
StartNew
有更多的配置选项

接下来,您只需在所有任务完成之前调用release前台线程:

var tasks=newlist();
对于(int i=0;i<10;i++)
{
int ind=i;//复制技巧以不总是获得10作为输出
tasks.Add(Task.Run)(()=>
{
控制台写入线(ind);
}));
}
等待任务。何时(任务);


@ @ PtEbBeNes明智地注意到,一旦单击按钮就考虑禁用(或者忽略某些状态变量,如“代码> ISTo加工< /COD> >继续”,直到操作结束,以避免多个用户点击。

< P>实际上,我的第一个建议是使用,而不是因为它是一个较新的版本,更是一个,尽管
StartNew
有更多选项可供配置

接下来,您只需在所有任务完成之前调用release前台线程:

var tasks=newlist();
对于(int i=0;i<10;i++)
{
int ind=i;//复制技巧以不总是获得10作为输出
tasks.Add(Task.Run)(()=>
{
控制台写入线(ind);
}));
}
等待任务。何时(任务);


@ @ PtEbBeNes明智地注意到,一旦单击按钮就考虑禁用(或者忽略某些状态变量,如“代码> ISTo加工< /代码>”),直到操作结束,以避免多个用户点击。

您可以启动多个任务,而不是等待它们立即将它们放入列表中。然后等待Task.whalll(tasks.ToArray())旁注:您可能希望在等待时禁用该按钮,以避免在用户双击时启动新的TAK。例如,您不应使用
Task.Factory.StartNew
async wait
。您可以启动多个任务,而不是立即将其放入列表中。然后等待Task.whalll(tasks.ToArray())旁注:您可能希望在等待时禁用该按钮,以避免在用户双击时启动新的TAK。例如,您不应将
Task.Factory.StartNew
async wait
一起使用。