次のことの違いは何ですか:
async Task<T> method(){
var r = await dynamodb.GetItemAsync(...)
return r.Item;
}
対
async Task<T> method(){
var task = dynamodb.GetItemAsync(...)
return task.Result.Item;
}
私の場合、何らかの理由で、2番目だけが機能します。最初のものは決して終わらないようです。
await
はタスクの結果を非同期にアンラップしますが、Resultを使用するだけではタスクが完了するまでブロックされます。
task.Result は、プロパティのgetアクセサーにアクセスし、非同期操作が完了するまで呼び出しスレッドをブロックします。 Wait method を呼び出すのと同じです。操作の結果が利用可能になると、保存され、Resultプロパティへの後続の呼び出しですぐに返されます。タスクの操作中に例外が発生した場合、またはタスクがキャンセルされた場合、Resultプロパティは値を返さないことに注意してください。代わりに、プロパティ値にアクセスしようとすると、AggregateException例外がスローされます。唯一の違いは、待機がブロックされないことです。代わりに、タスクの完了を非同期で待機してから再開します