【发布时间】:2020-01-22 11:25:23
【问题描述】:
我有以下代码:
static void Main(string[] args)
{
Run(() => LongProcess()).ContinueWith( t => Run(() => LongerProcess()));
int count = 5;
do
{
Console.WriteLine(count.ToString());
Thread.Sleep(100);
count++;
} while (count < 20);
Console.ReadKey();
}
private static void LongProcess()
{
Console.WriteLine("Long Process 1");
Thread.Sleep(2000);
Console.WriteLine("Long Process 2");
}
private static void LongerProcess()
{
Console.WriteLine("Longer Process 1");
Thread.Sleep(3000);
Console.WriteLine("Longer Process 2");
}
private static async Task Run(Action action)
{
await Task.Run(action); //shouldn't this wait until the action is completed??
// how should I modify the code so that the program waits until action is done before returning?
}
使用await Task.Run(action);,我希望程序会等到action 完成后,再继续下一步。换句话说,我期待这样的输出:
Long Process 1
Long Process 2
Longer Process 1
Longer Process 2
5
6
7
8
...
19
但是,输出是这样的
Long Process 1
5
6
7
8
...
19
Long Process 2
Longer Process 1
Longer Process 2
问题:
- 为什么
await Task.Run不等到action完成? - 如何更改代码以提供我想要的输出?
【问题讨论】: