Har*_*rry 3 .net c# async-await blazor
IJSRuntime.InvokeVoidAsync()
被称为代码路径中的最后一件事会导致 CA2012(正确使用 ValueTasks)警告。可以安全地忽略它,还是应该通过等待来解决它?
当我.Preserve()
在同步调用结束时添加警告消失,代码工作相同。这是为什么?发生什么了?这个方法有什么作用?(Preserve()
方法的)文档不清楚。
我想要“即发即忘”使用返回ValueTask
. 从同步方法调用它的最正确方法是什么?
添加一些上下文 - 我从 Blazor 代码执行 JS。我不依赖调用后JS代码引起的效果。这就是为什么我不等待它。我可以重构我的代码以等待,ValueTask
但除了让代码分析器满意之外,它还有其他用途吗?
但是从旧式事件处理程序调用呢?他们最多可以
async void
Blazor 事件处理程序回到学校,并且都可以async Task
。Razor 引擎知道如何处理这个问题。
唯一的问题是非 Blazor 事件,例如来自 Timer 的 Elapsed 事件。你可能需要async void
那里。
现在我的想法是尝试“一路异步”
是的,这就是要走的路。
同步(非异步)是对不需要任何异步的代码路径的小优化。例如 Counter 示例中的 IncrementCount() 方法(事件处理程序)。
但除了让代码分析器满意之外,它还有其他用途吗?
这将有助于 Blazor 在更新完成后刷新 UI。一个即发即弃的方法必须为它自己做 StateHasChanged() 逻辑。
如果你真的想f&f, _ = DoSomethingAsyncWithoutAwait();
InvokeAsync()
将您的任务发送到主 UI 线程。目前仅适用于 Blazor 服务器。仅当任务需要更新 UI 时才需要它,并且从正常的 Blazor 代码开始,最好只是等待。正常的 Blazor 生命周期不会被阻止。使用它来避免警告是次优的。
归档时间: |
|
查看次数: |
117 次 |
最近记录: |