在Sitecore MVC项目中调用Task.WhenAll时异步/等待阻止

时间:2019-07-11 07:13:40

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

我必须调用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应用程序。

1 个答案:

答案 0 :(得分:0)

从Nito.AsyncEx添加AsyncContext成功。