【发布时间】:2015-04-19 15:39:30
【问题描述】:
看看这段代码:
private async Task InnerTask(bool outerTaskResult)
{
Console.WriteLine("2");
await Task.Factory.StartNew(() => Thread.Sleep(10000));
Console.WriteLine("3");
}
private async void Button2_Click(object sender, RoutedEventArgs e)
{
var task = Task.FromResult(false);
Task<Task> aggregatedTask = task.ContinueWith(task1 => InnerTask(task1.Result));
Console.WriteLine("1");
await aggregatedTask;
Console.WriteLine("4");
}
想要的输出是:
1
2
3
4
但我明白了:
1
2
4
3
这可能与 InnerTask 在不同的线程上执行有关。
我使用 ContinueWith 是因为原始代码中的任务是以这种方式动态创建和排队的。
使用 .Wait() 方法(见下文)有效,但我认为这是一个坏主意,因为该方法是阻塞的。
task.ContinueWith(task1 => InnerTask(task1.Result).Wait())
这里的正确方法是什么?
【问题讨论】:
标签: c# .net task-parallel-library async-await task