为什么使用async wait Task时看不到控制台写入?

问题描述 投票:0回答:1

我是 C# 新手。 我编写了一个运行 C# 的代码,如下所示,并在主控制台中运行:

using System;
using System.Threading.Tasks;
class HelloWorld 
{
  static void Main() 
  {
    Task t = example1();
  }
  
  static async Task DoWork()
  {
    Console.WriteLine( " Hello World! " ); 
    for ( int i = 0 ; i < 3 ; i++ ) 
    { 
       Console.WriteLine( " Working..{0} " ,i); 
       await   Task.Delay( 1000 ); 
    } 
  }
  
  static async Task example1()
  {
      await DoWork();
      Console.WriteLine( " First async Run End " ); 
  }
}

我按下运行并得到答案: The console image 1

任何人都可以帮助我理解第一个代码中发生了什么问题吗? 以及如何正确实现async/await? 我读过很多关于 async/await C# 的内容,但仍然感到困惑。 谢谢。

但是当我尝试在 Main() 中添加

t.Wait()
时,例如:

using System;
using System.Threading.Tasks;
class HelloWorld 
{
  static void Main() 
  {
    Task t = example1();
    t.Wait();
  }
  
  static async Task DoWork()
  {
    Console.WriteLine( " Hello World! " ); 
    for ( int i = 0 ; i < 3 ; i++ ) 
    { 
       Console.WriteLine( " Working..{0} " ,i); 
       await   Task.Delay( 1000 ); 
    } 
  }
  
  static async Task example1()
  {
      await DoWork();
      Console.WriteLine( " First async Run End " ); 
  }
}

我可以得到答案: console image 2

我想我没有正确意识到异步/等待。

c# async-await task
1个回答
0
投票

这不是异步的事情,而是对象在 C# 中的工作方式。 你可以有类似的东西

class Cow{
   void MakeSound(){}
}

因此请致电

var blackCow = new Cow();

你只是创建了一个对象。

然后你需要打电话

blackCow.MakeSound();

所以这里你需要打电话

wait()

或者像这样创建它

Task t = Task.Run(() => example1());

还有其他一些可能性。

© www.soinside.com 2019 - 2024. All rights reserved.