gpt4 book ai didi

c# - 在Asp.net MVC Controller 上执行异步OnAction

转载 作者:行者123 更新时间:2023-12-03 13:20:44 24 4
gpt4 key购买 nike

我有一个任务需要在 Controller 处理完请求后执行,并且响应正在返回客户端。为此,我在 Controller 上覆盖了OnActionExecuted()事件,并在此方法内调用了任务。

由于该任务可能要花一些时间才能运行并且还返回void,因此我想异步调用它,以便覆盖的OnActionExecuted()方法可以立即返回,并且可以在任务执行时将响应发送给客户端。我尝试使用Task.Run()(在.net 4.5中)使用以下代码实现此功能

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
Task.Run(() => WrapUp());
}

但是,这不会产生所需的效果。当我单步执行代码时,它仍然会同步执行- WrapUp()方法退出之前,会调用 OnActionExecuted()方法中的所有内容。当 WrapUp()方法挂起时,在接收到响应之前,客户端将等待任务完成。

我需要做些什么才能使这项工作按预期进行?

最佳答案

OnActionExecuted将立即返回,因为在您内部仅创建和启动任务。您观察到的行为是不正常的。如果尝试以下操作,会发生什么:

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
Task.Run(() => Thread.Sleep(10000));
}

客户端不等待10秒钟来获得结果,是吗?

关于c# - 在Asp.net MVC Controller 上执行异步OnAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15111716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com