c# blazor 在委托类型 returns 'void' 时避免使用 'async' lambda
c# blazor avoid using 'async' lambda when delegate type returns 'void'
我在 JetBrains Rider 中收到以下警告,但我找不到解决方法。
这是一个 .net 6 的 blazor WASM 项目。
Avoid using 'async' lambda when delegate type returns 'void'
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
但是解决此问题的最佳做法是什么?
感谢任何提示!
从 razor 调用函数时不要调用 Task
函数。调用 void
函数,因为这是预期的。
<Validation Validator="e => ValidateFieldAsync(e)">
那么实际代码:
protected async void ValidateFieldAsync(ValidatorEventArgs args)
{
// Some code with awaits etc.
}
它仍然会 运行 异步所以不用担心在剃须刀调用代码中有 async
。
这里根本不需要 lambda。
<Validation Validator="ValidateFieldAsync" >
或
<Validation Validator=@ValidateFieldAsync >
或
<Validation Validator=ValidateFieldAsync >
应该都可以 - 这只是您对风格的偏好。
您通过此方法 return 任务是正确的。
Resharper 似乎在这里迷路了。警告不正确。
但无论如何你都可以改进它,
<Validation Validator="e => ValidateFieldAsync(e)">
只要 ValidateFieldAsync() 仍然 returns async Task
这仍然是异步和可等待的,只是开销少了一点。 lambda 中的 aync
和 await
添加了一个不需要的额外层。
它可能会阻止错误警告,我现在无法检查。
当你不需要任何参数或者当 Blazor 可以自动添加它时,你可以按照@MisterMagoo 的回答。
我在 JetBrains Rider 中收到以下警告,但我找不到解决方法。 这是一个 .net 6 的 blazor WASM 项目。
Avoid using 'async' lambda when delegate type returns 'void'
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
但是解决此问题的最佳做法是什么?
感谢任何提示!
从 razor 调用函数时不要调用 Task
函数。调用 void
函数,因为这是预期的。
<Validation Validator="e => ValidateFieldAsync(e)">
那么实际代码:
protected async void ValidateFieldAsync(ValidatorEventArgs args)
{
// Some code with awaits etc.
}
它仍然会 运行 异步所以不用担心在剃须刀调用代码中有 async
。
这里根本不需要 lambda。
<Validation Validator="ValidateFieldAsync" >
或
<Validation Validator=@ValidateFieldAsync >
或
<Validation Validator=ValidateFieldAsync >
应该都可以 - 这只是您对风格的偏好。
您通过此方法 return 任务是正确的。
Resharper 似乎在这里迷路了。警告不正确。
但无论如何你都可以改进它,
<Validation Validator="e => ValidateFieldAsync(e)">
只要 ValidateFieldAsync() 仍然 returns async Task
这仍然是异步和可等待的,只是开销少了一点。 lambda 中的 aync
和 await
添加了一个不需要的额外层。
它可能会阻止错误警告,我现在无法检查。
当你不需要任何参数或者当 Blazor 可以自动添加它时,你可以按照@MisterMagoo 的回答。