如何在 Task.WhenAll() 中添加這三個等待但使用我的模型的回傳值,因為如果不將它添加到 WhenAll() 中,我可以獲得我的模型的回傳。但是當在 Task.WhenAll() 中添加它時,我得到的只是一些 AsyncState、id 屬性。
var _pending = await _lookupService.GetFirstOrDefaultAsync<StatusLookup>(x => x.Code == LookupConstants.Pending);
var _cancel = await _lookupService.GetFirstOrDefaultAsync<StatusLookup>(x => x.Code == LookupConstants.Cancel);
var _completed = await _lookupService.GetFirstOrDefaultAsync<StatusLookup>(x => x.Code == LookupConstants.Completed);
List<Task> taskList = List<Task<StatusLookup>>();
taskList.Add(_lookupService.GetFirstOrDefaultAsync<StatusLookup>(x => x.Code == LookupConstants.Pending));
taskList.Add(_lookupService.GetFirstOrDefaultAsync<StatusLookup>(x => x.Code == LookupConstants.Cancel));
taskList.Add(_lookupService.GetFirstOrDefaultAsync<StatusLookup>(x => x.Code == LookupConstants.Completed));
var result = await Task.WhenAll(taskList);
謝謝
uj5u.com熱心網友回復:
您可以在WhenAll回傳后閱讀結果。您可以使用await(在已完成的任務上再次呼叫它不會做任何事情)或從Result.
var pendingTask = _lookupService.GetFirstOrDefaultAsync<StatusLookup>(x => x.Code == LookupConstants.Pending);
var cancelTask = _lookupService.GetFirstOrDefaultAsync<StatusLookup>(x => x.Code == LookupConstants.Cancel);
var completedTask = _lookupService.GetFirstOrDefaultAsync<StatusLookup>(x => x.Code == LookupConstants.Completed);
await Task.WhenAll( new [] { pendingTask, cancelTask, completedTask } );
_pending = pendingTask.Result;
_cancel = cancelTask.Result;
_complete = completedTask.Result;
您甚至可以跳過WhenAll. 這會給你一個稍微不同的行為,但它可能同樣有效:
var pendingTask = _lookupService.GetFirstOrDefaultAsync<StatusLookup>(x => x.Code == LookupConstants.Pending);
var cancelTask = _lookupService.GetFirstOrDefaultAsync<StatusLookup>(x => x.Code == LookupConstants.Cancel);
var completedTask = _lookupService.GetFirstOrDefaultAsync<StatusLookup>(x => x.Code == LookupConstants.Completed);
_pending = await pendingTask;
_cancel = await cancelTask;
_complete = await completedTask;
uj5u.com熱心網友回復:
你在這里有一個答案:https ://jeremylindsayni.wordpress.com/2019/03/11/using-async-await-and-task-whenall-to-improve-the-overall-speed-of-your-c-代碼/
用最少的語言告訴它,您應該將任務(不帶await)分配給變數。然后等待他們,最后在他們的財產WhenAll中閱讀他們的結果。Result
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/459775.html
