У меня есть простой консольного приложенияждут/асинхронной странное поведение
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
. Мне не хватает чего-то фундаментального здесь.
Почему это работает в первый раз? – user1054637
@ user1054637 Что вы имеете в виду в первый раз? – i3arnon
Я тестировал с Wait, и это работает, поэтому спасибо за это. Я имею в виду, когда я сначала запускал код, над которым я бежал, я видел возврат к методу APIVersion после того, как он попал в строку placeBreakPoint в Main, но только в первый раз. Последующие прогоны заканчиваются, как вы описали до того, как задача была выполнена. – user1054637