C# blador 避免在委托类型返回"void"时使用"异步"lambda



我在JetBrains Rider中收到以下警告,但我找不到解决方法。这是一个带有.net6的blazor WASM项目。

当委托类型返回"void"时,避免使用"async"lambda

示例代码Razor:

<Validation Validator="async e => await ValidateFieldAsync(e)">

样本代码c#:

protected async Task ValidateFieldAsync(ValidatorEventArgs args)
{
// Some code with awaits etc.
}

Jetbrains在这里描述了这个警告:

https://www.jetbrains.com/help/resharper/AsyncVoidLambda.html

但解决此问题的最佳实践是什么?

谢谢你的提示!

这里根本不需要lambda。

<Validation Validator="ValidateFieldAsync" >

<Validation Validator=@ValidateFieldAsync >

<Validation Validator=ValidateFieldAsync >

一切都应该奏效——这只是你对风格的偏好问题。

您从该方法返回Task是正确的。

看起来Resharper在这里失去了踪迹。警告不正确。

但你无论如何都可以改进,

<Validation Validator="e => ValidateFieldAsync(e)">

只要ValidateFieldAsync((仍然返回async Task这仍然是异步的和不可复用的,只是开销少了一点。lambda中的ayncawait添加了一个不需要的额外层。它可能会停止这种错误的警告,我现在无法检查。

当你不需要任何争论,或者Blazor可以自动添加时,你可以按照@MisterMagoo的回答。

从剃刀调用函数时,不要调用Task函数。调用void函数,因为这是所期望的。

<Validation Validator="e => ValidateFieldAsync(e)">

然后实际代码:

protected async void ValidateFieldAsync(ValidatorEventArgs args)
{
// Some code with awaits etc.
}

它仍然会以异步方式运行,所以不用担心在razor调用代码中有async

相关内容

  • 没有找到相关文章

最新更新