c# - 异步任务给出警告,(没有)异步任务给出错误

标签 c# asp.net-mvc asynchronous asp.net-core-viewcomponent

这可能是一个更精细的问题,但我在 ViewComponent 类中有以下方法

public async Task<IViewComponentResult> InvokeAsync()
{
    return View();
}

但名称 InvokeAsync 带有下划线并给出以下警告

This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread

但是如果我尝试从方法中删除 async 然后 return View() 带有红色下划线并输出以下错误

'Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult' to 'System.Threading.Tasks.Task' MVCStateManagement

所以我的问题是我应该采取什么方法?让异步忽略警告,或者是否有针对此警告的解决方法/修复?它对我的项目有那么大的影响吗?

谢谢!

最佳答案

不清楚为什么该方法被定义为 async返回 Task<IViewComponentResult> 的方法首先。

因为这个方法看起来是真正同步的并且只是返回一个 View ,你应该这样定义它:

public IViewComponentResult Invoke()
{
    return View();
}

同步方法不会仅仅因为添加了 async 就神奇地变成了异步方法关键字。

如果您正在实现一个接口(interface)并且不能更改方法的签名,您可以使用 Task.FromResult返回已完成任务的方法(您仍应删除 async 关键字):

public Task<IViewComponentResult> InvokeAsync()
{
    return Task.FromResult<IViewComponentResult>(View());
}

关于c# - 异步任务给出警告,(没有)异步任务给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51967347/

相关文章:

c# - 如何模拟从 Azure Function 调用的方法?

SimpleModal 中的 JQuery 自动完成

javascript - Bootstrap Dropdown 在本地不工作但在 Fiddle 上工作

sqlite - 使用 SQLite.Net.Async 的 Xamarin.Forms

javascript - 尝试连接输入框并在其中绑定(bind)值

c# - WiX 安装程序和自定义操作

c# - .NET 中的 Web 请求超时

javascript - 如果我在调用异步函数后调用它,为什么我的 Observer 订阅者没有运行?

Python 日志记录开销

c# - 如何读取 TIFF 头文件 c#?