【发布时间】:2020-11-24 02:40:12
【问题描述】:
这是一个非常简单的 MVC 异步操作:
[HttpPost]
public async Task<ContentResult> Trial()
{
ContentResult contentResult = await new Task<ContentResult>(()=>new ContentResult{Content="Hi"});
return contentResult;
}
我希望此操作的帖子能够以“嗨”内容进行响应。但事实并非如此。它以内容“System.Threading.Tasks.Task`1[System.Web.Mvc.ContentResult]”响应。
以下是完整回复:
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: -1
Vary: Accept-Encoding
X-UA-Compatible: IE=Edge
Date: Mon, 23 Nov 2020 17:02:37 GMT
Content-Length: 166
System.Threading.Tasks.Task`1[System.Web.Mvc.ContentResult]
希望了解原因以及如何使用异步函数按预期获取内容“嗨”。谢谢。
【问题讨论】:
-
因为你正在创建一个Task对象,而不是执行任务的结果。
-
尼尔明白了……你应该使用
Task.Run而不是new Task -
如果您使用的是非常旧的 MVC 版本,则可能会发生这种情况。您必须(至少)在 .NET Framework 4.5 上运行 ASP.NET 4.5,
Task-returning 操作方法才能工作。 -
谢谢。 @StephenCleary 完全正确。这是一个仍然指向 MVC 4.0 版的旧项目。谢谢。 (
Task.Run和new Task的行为相同)。 -
@StephanG 如果您将 Stephen Cleary 的回复标记为答案,那就太好了。会帮助别人。
标签: c# asp.net-mvc async-await