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 执行。我在这里遗漏了一些基本的东西。
您不是在等待任务,因此您的应用程序在任务有机会完成之前就结束了。
您需要 Wait
或 await
它(您不能在 Main
中执行此操作,但应该在其他任何地方执行)。
static void Main(string[] args)
{
MockAPI api = new MockAPI();
Task t = api.GetVersion();
var placeBreakPoint = "breakpoint";
t.Wait();
}
我有一个简单的控制台应用程序
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 执行。我在这里遗漏了一些基本的东西。
您不是在等待任务,因此您的应用程序在任务有机会完成之前就结束了。
您需要 Wait
或 await
它(您不能在 Main
中执行此操作,但应该在其他任何地方执行)。
static void Main(string[] args)
{
MockAPI api = new MockAPI();
Task t = api.GetVersion();
var placeBreakPoint = "breakpoint";
t.Wait();
}