等待/异步奇怪的行为

时间:2015-06-13 18:37:34

标签: c# .net asynchronous async-await task-parallel-library

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

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);

然后返回

var placeBreakPoint = "breakpoint";

返回

之前
return "v1.0";

延迟完成时。但是,此后运行代码会看到代码像以前一样执行,但永远不会从Task.Delay返回。我在这里遗漏了一些基本的东西。

1 个答案:

答案 0 :(得分:1)

您没有等待任务,因此在任务有机会完成之前您的申请已经结束。

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

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