aync与异步方法中的Task.Result

执行以下操作之间的区别是什么:

async Task method(){ var r = await dynamodb.GetItemAsync(...) return r.Item; } 

VS

 async Task method(){ var task = dynamodb.GetItemAsync(...) return task.Result.Item; } 

在我的情况下由于某种原因只有第二个工作。 第一个似乎永远不会结束。

await异步解包你的任务结果,而只是使用Result会阻塞,直到任务完成。

请参阅Jon Skeet的解释。

task.Result访问属性的get访问器阻塞调用线程,直到异步操作完成; 它相当于调用Wait方法 。 一旦操作结果可用,它就会被存储并在后续调用Result属性时立即返回。 请注意,如果在任务操作期间发生exception,或者任务已被取消,则Result属性不会返回值。 相反,尝试访问属性值会引发AggregateExceptionexception。 唯一的区别是await不会阻止。 相反,它将异步等待任务完成然后恢复