这可能是一个更精细的问题,但我在ViewComponent类中有以下方法
public async Task<IViewComponentResult> InvokeAsync()
{
return View();
}
但InvokeAsync名称带有下划线并给出以下警告
这种异步方法缺少'等待'运算符并将同步运行 . 考虑使用'await'运算符等待非阻塞API调用,或'await Task.Run(...)'在后台线程上执行CPU绑定工作
但如果我尝试从方法中删除异步,则返回View()带有红色下划线并输出以下错误
'Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult'到'System.Threading.Tasks.Task'MVCStateManagement
所以我的问题是我应该采取什么方法?让异步显示警告,或者是否有针对此警告的解决方法/修复方法?它对我的项目有多大影响吗?
谢谢!
3 回答
目前还不清楚为什么该方法被定义为首先返回
Task<IViewComponentResult>
的async
方法 .由于该方法似乎是真正的同步并且只是返回一个视图,您应该像这样定义它:
同步方法不会因为您向其添加
async
关键字而神奇地变为异步 .如果您正在实现接口并且无法更改方法的签名,则可以使用
Task.FromResult
方法返回已完成的任务(您仍应删除async
关键字):该方法在ViewcomponentResult的Task上运行 . 你可以使用这个来调用它而不是异步:
您的警告将不再显示,您的代码将会运行 . 你也可以离开它 . 两者都不会对项目的性能产生影响 .
您必须删除异步标志和
Task<>
. 只需返回一个IViewComponentResult
.执行异步工作时,您将以简单的方式返回包裹在
Task<>
中的对象 . 如果你不这样做没有任何意义 .来自MSDN:
https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1?view=netframework-4.7.2
编辑:
您也可以尝试返回: