await/async 奇怪的行为

await/async odd behaviour

我有一个简单的控制台应用程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    public class Program
    {
        static void Main(string[] args)
        {
            MockAPI api = new MockAPI();
            Task t = api.GetVersion();
            var placeBreakPoint = "breakpoint";
        }
    }

    public class MockAPI
    {
        public async Task<string> GetVersion() 
        {
            return await APIVersion();
        }

        private async Task<string> APIVersion()
        {
            await Task.Delay(3000);
            return "v1.0";
        }
    }
}

当我 运行 这是第一次执行时,我希望看到代码一直到

await Task.Delay(3000);

然后return转到

var placeBreakPoint = "breakpoint";

在 return 到

之前
return "v1.0";

延迟完成时。然而 运行 此后的代码看到代码像以前一样执行,但从未从 Task.Delay return 执行。我在这里遗漏了一些基本的东西。

您不是在等待任务,因此您的应用程序在任务有机会完成之前就结束了。

您需要 Waitawait 它(您不能在 Main 中执行此操作,但应该在其他任何地方执行)。

static void Main(string[] args)
{
    MockAPI api = new MockAPI();
    Task t = api.GetVersion();
    var placeBreakPoint = "breakpoint";
    t.Wait();
}