await/async
环境中是否有任何功能可以测试await
是否会暂停方法/阻止?或者这种模式中没有包含这样的功能?
答案 0 :(得分:2)
您可以检查IsCompleted
上的Task
以查看它是否已完成(如果已完成,则该方法不会被暂停)。但是,虽然您可以可靠地确定不需要继续,但是您永远无法可靠地确定 是否必要,只是因为您检查Task
是否完成并看到它后面的那一刻&# 39; s尚未完成,它可以完成,导致该方法没有返回给调用者(还)。
答案 1 :(得分:2)
对于要等待的东西,它必须有一个名为GetAwaiter()
的函数,并且返回的对象必须follow a specific pattern。模式的一部分是它必须具有公共属性bool IsCompleted { get; }
。
var awaiter = foo.GetAwaiter();
if(awaiter.IsCompleted)
{
//You know for sure awaiting foo will not cause a context change
}
else
{
//Awaiting will likely cause a context change but the value of IsCompleted
// could change between the "if" check and the await call.
}
await foo;