嗨,我是异步编程的新手。我正在关注 YouTube 视频来学习。如果使用
Task.Run
,Thread.Sleep
将停止工作。
class App
{
public static void Main(string[] args)
{
Console.WriteLine("app started");
AsTask();
Console.WriteLine("app Stopped");
}
public static async void AsTask()
{
Console.WriteLine("outside await");
await Task.Run(() =>
{
Console.WriteLine("Inside asyn fun");
Thread.Sleep(1);
Console.Write("async Task Started");
Console.Write(" # Task Completed");
Console.WriteLine();
});
}
}
如果使用 thread.sleep,Task.Run 将停止工作。
不,它没有。
但是,您并没有在
Main
方法中等待任务完成 - 您的异步方法返回 void
而不是 Task
,所以您基本上是在说“开始做事,我不在乎什么时候结束。”当您的 Main
方法完成时,进程完成 - 线程池(您的任务将在其中执行)使用“后台”线程,因此它们不会阻止进程完成。
如果你想等到你的异步方法真正完成,你应该改变这个:
public static async void AsTask()
到
public static async Task AsTask()
...并使您的
Main
方法异步,以便它可以等待任务:
public static async Task Main(string[] args)
{
Console.WriteLine("app started");
await AsTask();
Console.WriteLine("app Stopped");
}