关于TPL我有一些问题。
正如你所看到的,我创建了2个简单的任务并将它们添加到列表中。
问题(预期行为)是,在WorkMethodAsync
中点击“await”后,任务立即返回,因此使Task.WhenAll
无用。
有没有办法等待子任务完成?
我找到的唯一解决方法是伪造WorkMethodAsync
成同步。
private async void button1_Click(object sender, EventArgs e)
{
Tasks = new List<Task>();
var myTask1 = Task.Factory.StartNew(async () => await WorkMethodAsync(), CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default);
var myTask2 = Task.Factory.StartNew(async () => await WorkMethodAsync(), CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default);
Tasks.Add(myTask1);
Tasks.Add(myTask2);
await Task.WhenAll(Tasks.ToArray());
}
private async Task WorkMethodAsync()
{
while (true)
{
await Task.Delay(10000);
}
return;
}
async void
是完全可以的。 - i3arnonTask.WhenAll
的结果,这就是我认为可能存在的问题。我阅读了你的答案并意识到问题在于你得到了一个Task<Task>
,它立即完成了。 - Asad Saeeduddin