C# Thread.sleep 导致 Task.Run 不工作

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

嗨,我是异步编程的新手。我正在关注 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();
        });
    }
} 

c# asynchronous async-await
1个回答
6
投票

如果使用 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");
}
© www.soinside.com 2019 - 2024. All rights reserved.