async和await不起作用

Win*_*der 1 .net c# asynchronous async-await

我正在尝试学习异步和等待.NET 4.5的功能.首先,这是我的代码

    static async void Method()
    {
        await Task.Run(new Action(DoSomeProcess));
        Console.WriteLine("All Methods have been executed");
    }

    static void DoSomeProcess()
    {
        System.Threading.Thread.Sleep(3000);
    }

    static void Main(string[] args)
    {
        Method();
        //Console.WriteLine("Method Started");
        Console.ReadKey();
    }
Run Code Online (Sandbox Code Playgroud)

此代码不会在控制台上给我任何结果.我不明白为什么.我的意思是不是任务假设只是没有阻塞的线程.但是,如果我在main方法中取消注释Console.WriteLine(),一切似乎都正常.

谁能告诉我这里发生了什么?

Mic*_*haC 9

使用async/await模式,有些东西与先前的线程不同.

  1. 你不应该使用,System.Threading.Thread.Sleep 因为它仍然是阻塞的,不能用于异步.而是使用Task.Delay

  2. 考虑使所有代码异步.只有控制台中的Main方法不能同步原因

  3. 避免async void方法.基本上async void仅适用于无法返回某些内容的事件处理程序.所有其他异步方法应该返回TaskTask<T>

修改了你的例子:

    static async Task Method()
    {
        await DoSomeProcess();
        Console.WriteLine("All Methods have been executed");
    }

    static async Task DoSomeProcess()
    {
        await Task.Delay(3000);
    }
Run Code Online (Sandbox Code Playgroud)

现在更改Main方法,因为这应该是您开始任务的地方

    Task.Run(() => Method()).Wait();
    //Console.WriteLine("Method Started");
    Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)