有时,当我运行使用代码所做的异步async和await,我发现代码的某些部分甚至没有得到执行.例如,在以下代码中,控制台屏幕上未显示"Sleeping2":
public static void Sleeping(int millis)
{
System.Console.WriteLine("Sleeping1");
System.Threading.Thread.Sleep(millis);
System.Console.WriteLine("Sleeping2");
}
public static async void SleepingAsync(int millis)
{
await System.Threading.Tasks.Task.Run(() => Sleeping(millis));
}
public static async void DoSleepingMain()
{
System.Console.WriteLine("DoSleepingMain1");
SleepingAsync(12000);
System.Console.WriteLine("DoSleepingMain2");
}
public static void Main(string[] args)
{
DoSleepingMain();
}
Run Code Online (Sandbox Code Playgroud)
另一个例子是以下,其中不显示Sleeping1或Sleeping2.我不明白这是因为我await在DoSleepingMain方法中的任务.
public static void Sleeping(int millis)
{
System.Console.WriteLine("Sleeping1");
System.Threading.Thread.Sleep(millis);
System.Console.WriteLine("Sleeping2");
}
public static async Task SleepingAsync(int millis)
{
System.Threading.Tasks.Task.Run(() => Sleeping(millis)); //warning: call not awaited
}
public static async void DoSleepingMain() …Run Code Online (Sandbox Code Playgroud)