Blazor(服务器)和异步/等待模式

DrG*_*iff 3 async-await blazor blazor-server-side

Microsoft(Daniel Roth 和 Luke Latham)撰写的ASP.NET Core Blazor 简介文章展示了 Razor 代码中等待调用的示例,例如

@code {
    private WeatherForecast[] forecasts;

    protected override async Task OnInitializedAsync()
    {
        forecasts = await ForecastService.GetForecastAsync(DateTime.Now);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,没有一个示例表明剃刀页面是否应该在捕获的上下文上继续,例如

.ConfigureAwait(false);
or 
.ConfigureAwait(true); 
Run Code Online (Sandbox Code Playgroud)

Blazor 是否有 UI 线程是唯一能够更新组件的线程的概念?在页面和/或页面组件中调用等待的调用时,什么被认为是“最佳实践”。

Hen*_*man 5

Blazor 是否有 UI 线程是唯一能够更新组件的线程的概念?

使用服务器端 Blazor:是的。
对于客户端来说,只有一个线程(JavaScript),所以,是的,有点。

在页面和/或页面组件中调用等待的调用时,什么被认为是“最佳实践”。

使用任何ConfigureAwait()。

您所在的同步上下文具有隐式默认行为 ConfigureAwait(true)

仅当您创建额外的线程(使用 Task.Run())时,ConfigureAwait() 才会有用,但通常您不应该希望这样做。