线程无法正常工作

Fil*_*lho 1 multithreading task c#-4.0

我有以下代码,用于测试C#上的Task框架

  static void Main(string[] args)
  {
            Task<string> task1 = AsyncA();
            task1.ContinueWith(Print);

            Task<string> task2 = AsyncB();
            task2.ContinueWith(Print);

            Task.WaitAll(new Task[] {task1, task2});
   }

   static async Task<string> AsyncA()
   {
            Thread.Sleep(1500);
            return "A";
   }

   static async Task<string> AsyncB()
   {
            Thread.Sleep(430);
            return "B";
   }

   static async void Print(Task<string> str)
   {
            Console.WriteLine(str.Result);
   }
Run Code Online (Sandbox Code Playgroud)

我的输出如下:

一个
B.

我究竟做错了什么?提前致谢.

Mon*_*Zhu 9

您正在运行的方法AsyncAAsyncB同步.如果您正在使用async,则需要await完成任务.将您的方法更改为

static async Task<string> AsyncA()
{
    await Task.Delay(1500);
    return "A";
}

static async Task<string> AsyncB()
{
    await Task.Delay(430);    
    return "B";
}
Run Code Online (Sandbox Code Playgroud)

你会得到你期望的输出

B
A.

有关进一步参考,请查看MSDN示例

编辑:

为了完整起见,您还应该Print以相同的方式更改方法,否则它也会同步运行到现在为止.
因为在这个方法中你可以通过参数获得任务,你可以直接在Console.WriteLine方法中等待结果:

static async void Print(Task<string> str)
{
    Console.WriteLine(await str);
}
Run Code Online (Sandbox Code Playgroud)