【发布时间】:2020-03-12 08:47:22
【问题描述】:
我有一个带有按钮和列表框的表单。我想将两个函数的结果添加到列表框中。这两个功能可能需要未知的时间才能完成,我想同时执行它们。只要其中一个函数完成计算,我想在列表框中显示结果(在另一个函数完成之前)。目前,两个功能完成后会显示结果。如果函数自己更新列表框,我不介意。
async Task<string> LongTaskAsync()
{
for(int i = 0; i < 50; i++) {
Thread.Sleep(100);
}
return "Completed long task async";
}
async Task<string> ShortTaskAsync()
{
for(int i = 0; i < 5; i++) {
Thread.Sleep(100);
}
return "Completed short task async";
}
async void BtnRunClick(object sender, EventArgs e)
{
listBox1.Items.Clear();
var longTask = Task.Run(() => LongTaskAsync());
var shortTask = Task.Run(() => ShortTaskAsync());
listBox1.Items.Add(await longTask);
listBox1.Items.Add(await shortTask);
}
【问题讨论】:
-
不要在任务中使用
Thread.Sleep。使用Task.Delay和await。 -
感谢您的建议,我以后会这样做。对于这个例子,我认为这并不重要。
-
是的,我知道它不能解决任何关于这个问题的问题,但我只是说:)
-
我现在没时间回答,看
ContinueWith,我想你可以解决它。
标签: c# winforms asynchronous async-await task