none
我想搞清楚async与await,可是就这样的程序让我的windows8.1崩溃,运行就会。 RRS feed

  • 问题

  •  public static async Task B()
            {
                Console.WriteLine(DateTime.Now.ToString() + "线程ID:" + Thread.CurrentThread.ManagedThreadId);
            }
    
            public async static Task A()
            {
                Task.Delay(9000);
                await B();
                Console.WriteLine(DateTime.Now.ToString() + "线程ID:" + Thread.CurrentThread.ManagedThreadId);
            }
    
            static void Main(string[] args)
            {
                Console.WriteLine(DateTime.Now.ToString() + "线程ID:" + Thread.CurrentThread.ManagedThreadId);
                A();
             
                Console.WriteLine(DateTime.Now.ToString() + "线程ID:" + Thread.CurrentThread.ManagedThreadId);
                
                Console.ReadLine();
            }

    2014年9月7日 12:16

答案

  • 要实现async的异步方法的程序片段,必须拥有GetAwaiter方法(具体可以参考我写的技术博客:关于异步的误区自定义异步

    你的程序并不会引发宕机,不过不加await相当于异步不等待执行完毕,注意Main函数和A函数中的Task.Delay有绿色下划线:

    这个表示说你的这个异步函数后台运行,但是主线程继续执行。所以,你要做到异步运行既不卡当前程序,同时必须等到异步之后返回结果,可以这样做:

    public class Test
        {
            public static async Task B()
            {
                Console.WriteLine(DateTime.Now.ToString() + "B线程ID:" + Thread.CurrentThread.ManagedThreadId);
            }

            public async static Task A()
            {
                await Task.Delay(9000);
                await B();
                Console.WriteLine(DateTime.Now.ToString() + "A线程ID:" + Thread.CurrentThread.ManagedThreadId);
            }

            static void Main(string[] args)
            {
                Console.WriteLine(DateTime.Now.ToString() + "Main线程ID:" + Thread.CurrentThread.ManagedThreadId);
                A();

                Console.WriteLine(DateTime.Now.ToString() + "Main线程ID:" + Thread.CurrentThread.ManagedThreadId);

                Console.ReadLine();
            }
        }


    ASP.NET Forum
    Other Discussion Forums
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    2014年9月8日 0:48
    版主