第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

控制器并行調(diào)用時如何等待結(jié)果

控制器并行調(diào)用時如何等待結(jié)果

C#
白板的微信 2023-09-24 11:39:52
我正在嘗試從數(shù)據(jù)庫 (GetAccountDetailAsync) 查找一系列帳戶的帳戶詳細(xì)信息,并希望并行運(yùn)行以使其更快。[HttpPost]public async Task<IHttpActionResult> GetAccountsAsync(IEnumerable<int> accountIds){    var resultAccounts = new List<AccountDetail>();    var task = Task.Run(() =>    {        Parallel.ForEach(accountIds, new ParallelOptions        {            MaxDegreeOfParallelism = 5         }, async accountId =>        {            var response = await GetAccountDetailAsync(accountId).ConfigureAwait(false);            resultAccounts.AddRange(response);        });    });    task.Wait();    return Ok(resultAccounts);}但我沒有得到結(jié)果,盡管我有任務(wù)。等等。不知道為什么 task.Wait 沒有被阻止?!爱惒侥K或處理程序已完成,而異步操作仍處于掛起狀態(tài)?!?
查看完整描述

2 回答

?
ibeautiful

TA貢獻(xiàn)1993條經(jīng)驗 獲得超6個贊

Parallel.ForEach不適用于操作async,但您可以使用以下命令啟動所有任務(wù),然后等待它們?nèi)客瓿蒚ask.WhenAll:


[HttpPost]

public async Task<IHttpActionResult> GetAccountsAsync(IEnumerable<int> accountIds)

{

    Task<List<AccountDetail>>[] tasks = accountIds.Select(accountId => GetAccountDetailAsync(accountId)).ToArray();

    List<AccountDetail>[] results = await Task.WhenAll(tasks);

    return Ok(results.SelectMany(x => x).ToList());

}


查看完整回答
反對 回復(fù) 2023-09-24
?
青春有我

TA貢獻(xiàn)1784條經(jīng)驗 獲得超8個贊

GetAccountDetail假設(shè)您擁有或可以輕松獲得沒有異步部分的方法,這將是最簡單的方法:


[HttpPost]

public async Task<IHttpActionResult> GetAccountsAsync(IEnumerable<int> accountIds)

{

   var resultList = accountIds.AsParallel()

                              .WithDegreeOfParallelism(5)

                              .Select(GetAccountDetail)

                              .ToList();

   return Ok(resultList);

}


查看完整回答
反對 回復(fù) 2023-09-24
  • 2 回答
  • 0 關(guān)注
  • 154 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號