我已阅读here:
等待检查等待以查看是否已经完成;如果 等待已经完成,然后方法继续 运行(同步,就像常规方法一样)。
什么?
当然它还没有完成,因为它还没有开始!
示例:
public async Task DoSomethingAsync()
{
await DoSomething();
}
此处await
检查等待审核是否已经完成
(根据文章),但它(DoSomething)还没有事件开始了! ,因此结果总是为false
如果文章要说:
等待检查是否等待已经完成 在
x
毫秒内; (超时)
我可能在这里遗漏了一些东西..
答案 0 :(得分:13)
考虑这个例子:
public async Task<UserProfile> GetProfileAsync(Guid userId)
{
// First check the cache
UserProfile cached;
if (profileCache.TryGetValue(userId, out cached))
{
return cached;
}
// Nope, we'll have to ask a web service to load it...
UserProfile profile = await webService.FetchProfileAsync(userId);
profileCache[userId] = profile;
return profile;
}
现在想象一下在另一个异步方法中调用它:
public async Task<...> DoSomething(Guid userId)
{
// First get the profile...
UserProfile profile = await GetProfileAsync(userId);
// Now do something more useful with it...
}
完全可能是GetProfileAsync
返回的任务在方法返回时已经完成 - 因为缓存。或者你当然可以等待异步方法的结果。
所以不,你声称等待它的时候还没有完成,这是不正确的。
还有其他原因。请考虑以下代码:
public async Task<...> DoTwoThings()
{
// Start both tasks...
var firstTask = DoSomethingAsync();
var secondTask = DoSomethingElseAsync();
var firstResult = await firstTask;
var secondResult = await secondTask;
// Do something with firstResult and secondResult
}
第二个任务可能在第一个任务之前完成 - 在这种情况下,当你等待第二个任务时,它将完成,你可以继续前进。
答案 1 :(得分:3)
await可以接受任何Task
或Task<T>
,,包括已完成的任务。
在您的示例中,内部DoSomething()
方法(应该命名为DoSomethingAsync()
及其调用者DoSomethingElseAsync()
)返回Task
(或Task<T>
})。该任务可以是从其他地方获取的已完成任务,该方法不需要启动自己的任务。