Асинхронная / ждущая блокировка на Task. Когда все вызывается в проекте Sitecore MVC - PullRequest
0 голосов
/ 11 июля 2019

Мне нужно вызвать restsharp ExecuteTaskAsync, я использовал await при выполнении API и жду завершения всех задач, так как он запускается в цикле, как только он достигает await System.Threading.Tasks.Task.WhenAll(tasksList), то нет, он заблокирован, нет ответа вit.

Вызов асинхронного кода:

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

Для выполнения ExecuteTaskAsync Restsharp:

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 };
}

Подготовка запроса и вызов ExecuteTaskAsync RestSharp:

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) - он не работает.
Это приложение ASP.Net MVC в sitecore.

1 Ответ

0 голосов
/ 14 июля 2019

Добавление AsyncContext из Nito.AsyncEx сработало.

...