У меня есть класс с такими методами:
private Task Sleep()
{
return Task.Delay(SleepDuration);
}
public async Task<User> Login(string username, string password)
{
await Sleep();
return new User { Id = 1, Username = username };
}
Обратите внимание, что во время моих тестов SleepDuration
установлено на 0.
Если я вызову следующее в тесте проекта iOS NUnit:
myClass.Login("username", "password").Wait();
Пользовательский интерфейс тестировщика приостанавливается и никогда не завершается. Если я добавлю точки останова, код никогда не достигнет строки после await
. Тот же тест отлично работает в стандартном средстве запуска NUnit в проекте .Net 4.5 Mono. Это также отлично работает в моем приложении, хотя я никогда не вызываю Wait
и всегда использую async/await.
Любые идеи? Есть ли что-то еще, что я могу использовать вместо Task.Delay
, чтобы предотвратить взаимоблокировку? Я уже пробовал Task.Factory.StartNew(() => { })
.