#.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();
}