Выполнение Http-вызовов в асинхронном режиме внутри метода жизненного цикла blazor OnAfterRenderAsync

#.net #asynchronous #blazor

Вопрос:

Я столкнулся со странной проблемой с методом жизненного цикла OnAfterRenderAsync blazor. Я выполняю Http-вызовы внутри этого метода, некоторые вызовы могут занимать много времени, но другие быстро извлекают данные. Ниже приведен пример кода:

    private List<MiniTrackedOrderDTO> orderStates;
   protected override async Task OnAfterRenderAsync(bool firstRender)
   {
       if (firstRender) { 
          orderStates =  await Http.GetFromJsonAsync<IEnumerable<MiniTrackedOrderDTO>>("Salesman/GetOrderState");
       // second Http call
       // third Http call 
       this.StateHasChanged();
       }
    } 
 

Я знаю, что второй вызов короче, поэтому я хочу обновить свое представление, как только оно завершится, текущее поведение заключается в том, что представление не отображается повторно, пока все вызовы не будут завершены. Поставив консоль.Строка записи под каждым Http-вызовом, я заметил, что вызовы выполняются последовательно

Ответ №1:

Добавьте задержку между звонками, например:

    private List<MiniTrackedOrderDTO> orderStates;
   protected override async Task OnAfterRenderAsync(bool firstRender)
   {
       if (firstRender) { 
          orderStates =  await Http.GetFromJsonAsync<IEnumerable<MiniTrackedOrderDTO>>("Salesman/GetOrderState");

       this.StateHasChanged();
       await Task.Delay(10);

       // second Http call
       this.StateHasChanged();
       await Task.Delay(10);

       // third Http call 
       this.StateHasChanged();
}