gpt4 book ai didi

c# - 关于在 Blazor 中使用 ValueTask 的 CA2012 警告。如何在 Blazor 中正确实现 "fire and forget"?

转载 作者:行者123 更新时间:2023-12-04 02:25:17 28 4
gpt4 key购买 nike

IJSRuntime.InvokeVoidAsync()被称为代码路径中的最后一件事会导致 CA2012(正确使用 ValueTasks)警告。可以安全地忽略它,还是应该通过等待来解决它?
当我添加 .Preserve()在我的同步调用结束时,警告消失,代码工作相同。这是为什么?发生什么了?这个方法有什么作用?文档(Preserve() 方法)不清楚。
我想要“即发即忘”使用返回 ValueTask 的方法.从同步方法调用它的最正确方法是什么?
添加一些上下文 - 我从 Blazor 代码执行 JS。我不依赖调用后JS代码引起的效果。这就是为什么我不等待它。我可以重构我的代码以等待 ValueTask但除了让代码分析器满意之外,它还有其他用途吗?

最佳答案

But what about calling from old school event handlers? They can be at best async void


Blazor eventhandlers 回到学校,都可以是 async Task . Razor 引擎知道如何处理这个问题。
唯一的问题是非 Blazor 事件,例如来自 Timer 的 Elapsed 事件。您可能需要 async void那里。

For now my idea is to try to go "async all the way"


是的,这就是要走的路。
同步(非异步)是对不需要任何异步的代码路径的小优化。例如 Counter 示例中的 IncrementCount() 方法(事件处理程序)。

but would it serve any other purpose than making the Code Analyzer happy?


这将有助于 Blazor 在更新完成后刷新 UI。一个即发即弃的方法必须为它自己做 StateHasChanged() 逻辑。
如果你真的想f&f, _ = DoSomethingAsyncWithoutAwait(); InvokeAsync()将您的任务发送到主 UI 线程。目前仅适用于 Blazor 服务器。仅当任务需要更新 UI 时才需要它,并且从正常的 Blazor 代码开始,最好只是等待。正常的 Blazor 生命周期不会被阻止。使用它来避免警告是次优的。

关于c# - 关于在 Blazor 中使用 ValueTask 的 CA2012 警告。如何在 Blazor 中正确实现 "fire and forget"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68252275/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com