【问题标题】:Async/Await blocking on Task.WhenAll is called in Sitecore MVC project在 Sitecore MVC 项目中调用 Task.WhenAll 的异步/等待阻塞
【发布时间】:2025-12-25 09:20:07
【问题描述】:

我必须调用一个restsharp ExecuteTaskAsync,我在执行API 时使用了await 并等待完成所有任务,因为它在循环中运行,一旦它达到await System.Threading.Tasks.Task.WhenAll(tasksList),然后不它被阻塞,没有响应它。

调用异步代码:

Task<IEnumerable<AsyncResponse>> responseList = AddPAsync(id, id1);

执行 Restsharp 的 ExecuteTaskAsync:

public static async Task<AsyncResponse> ExecuteApiAsync(RestRequest request, string url, dynamic identifier)
{
    var restClient = new RestClient(url);
    var cancellationTokenSource = new CancellationTokenSource();
    var restResponse = await restClient.ExecuteTaskAsync(request);

    return new AsyncResponse{ RestResponse = restResponse, Identifier = identifier };
}

准备请求并调用 RestSharp 的 ExecuteTaskAsync:

private async Task<IEnumerable<AsyncResponse>> AddPAsync(List<Participant> participantInfo, string registrationId)
{
    foreach (var p in pinfo)
    {
        try
        {
            var request = new RestRequest(Constants.API_VERSION + Uri, Method.POST);
            request.AddHeader("Authorization", string.Format("Bearer {0}", accessToken));
            request.AddParameter(Constants.APP_JSON, JsonConvert.SerializeObject(p), ParameterType.RequestBody);

            var response = Util.ExecuteApiAsync(request, Constants.END_POINT_URL_NAME, p.Identifier);
            tasksList.Add(response);
        }
        catch (Exception ex)
        {

        }
    }

    await System.Threading.Tasks.Task.WhenAll(tasksList);
}

当它点击await Task.WhenAll 时没有响应。
我已经试过了:
`ConfigureAwait(false) - 它不工作。
它是sitecore中的ASP.Net MVC应用程序。

【问题讨论】:

  • @Dumisani 那个会阻止,而await Task.WhenAll() 不会阻止
  • 好吧,你没有await 在那个Task&lt;IEnumerable&lt;AsyncResponse&gt;&gt; responseList = AddPAsync(id, id1);,是吗。你后来也awaitresponseList吗?
  • 您的调用堆栈进一步是否有阻塞调用?
  • @AbhishekJain 差不多。然后,您如何获得从非异步方法调用的异步 AddPAsync 方法的结果? using responseList.Result?

标签: asp.net-mvc async-await sitecore restsharp multitasking


【解决方案1】:

从 Nito.AsyncEx 添加 AsyncContext 有效。

【讨论】: