执行以下操作之间的区别是什么:
async Task<T> method(){
var r = await dynamodb.GetItemAsync(...)
return r.Item;
}
VS
async Task<T> method(){
var task = dynamodb.GetItemAsync(...)
return task.Result.Item;
}
在我的情况下,由于某种原因,只有第二个工作。第一个似乎永远不会结束。
答案 0 :(得分:35)
await
异步解包您的任务结果,而只是使用Result会阻塞,直到任务完成。
答案 1 :(得分:11)
task.Result正在访问属性的get访问器阻塞调用线程,直到异步操作完成;它相当于调用Wait method。 一旦操作的结果可用,它就会被存储并在后续调用Result属性时立即返回。请注意,如果在任务操作期间发生异常,或者任务已被取消,则Result属性不会返回值。相反,尝试访问属性值会引发AggregateException异常。 唯一的区别是await不会阻止。相反,它将异步等待任务完成然后恢复