由于 Thread.Sleep,Task.Run 无法工作

Yug*_*dhu 0 c# asynchronous async-await

嗨,我是异步编程的新手。我正在观看 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();
        });
    }
} 
Run Code Online (Sandbox Code Playgroud)

截屏

Jon*_*eet 10

如果使用 thread.sleep,Task.Run 将停止工作。

不,事实并非如此。

但是,您不会等待方法中的任务完成Main- 您的异步方法返回void而不是 a Task,因此您基本上是在说“开始做事情,我不在乎它何时完成。” 当您的Main方法完成时,进程就会完成 - 线程池(您的任务将在其中执行)使用“后台”线程,因此它们不会阻止进程完成。

如果您想等到异步方法实际完成,您应该更改此设置:

public static async void AsTask()
Run Code Online (Sandbox Code Playgroud)

public static async Task AsTask()
Run Code Online (Sandbox Code Playgroud)

...并使您的Main方法异步,以便它可以等待任务:

public static async Task Main(string[] args)
{
    Console.WriteLine("app started");
    await AsTask();
    Console.WriteLine("app Stopped");
}
Run Code Online (Sandbox Code Playgroud)