我有一个类有一些这样的方法:
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();
测试运行器的 UI 暂停并且永远不会完成。如果我添加断点,代码永远不会到达await
. 相同的测试在 .Net 4.5 Mono 项目的标准 NUnit 运行器中运行良好。它在我的应用程序中也可以正常工作,尽管我从不调用Wait
并且总是使用 async/await。
有任何想法吗?还有什么我可以用来代替Task.Delay
防止死锁的吗?我已经试过Task.Factory.StartNew(() => { })
了。