使用 await 和 async 关键字能够非常方便的解决异步调用的问题,但在某些业务场景中,我们需要保证方法执行的顺序,所以需要同步执行异步方法,下面提供解决方案

对于无需返回值的异步方法,只需在异步方法后面加Wait()方法即可

对于需要返回值的异步方法,需要在异步方法后面追加GetAwaiter().GetResult()

using System;
using System.Threading.Tasks;

namespace AsyncTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Async Test job:");

            Console.WriteLine("main start..");

            Console.WriteLine("MyMethod()异步方法同步执行:");

            MyMethod().Wait();//在main中等待async方法执行完成

            int i = MyMethod().GetAwaiter().GetResult();//用于在main中同步获取async方法的返回结果

            Console.WriteLine("i:" + i);

            Console.WriteLine("main end..");

            Console.ReadKey(true);
        }

        static async Task<int> MyMethod()
        {
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("Async start:" + i.ToString() + "..");
                await Task.Delay(1000); //模拟耗时操作
            }
            return 0;
        }
    }
}