首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >asp.net模式下的异步OnActionExecuted

asp.net模式下的异步OnActionExecuted
EN

Stack Overflow用户
提问于 2013-02-27 20:06:00
回答 1查看 1.7K关注 0票数 1

我有一个任务需要在请求被控制器处理并且响应在返回客户端的过程中执行。为此,我重写了控制器上的OnActionExecuted()事件,并在此方法中调用任务。

由于任务可能需要一些时间才能运行,并且还会返回空,因此我希望异步调用它,以便被覆盖的OnActionExecuted()方法可以立即返回,并且可以在任务执行时将响应发送到客户端。我试着用下面的代码来实现这一点,使用Task.Run() (在.net 4.5中)

代码语言:javascript
复制
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
    Task.Run(() => WrapUp());
}

然而,这并没有产生预期的效果。当我单步执行代码时,它仍然同步执行-在OnActionExecuted()方法退出之前,WrapUp()方法中的所有内容都会被调用。当WrapUp()方法挂起时,客户端将等待任务完成,然后才能收到响应。

我需要做些什么才能让它按预期工作?

EN

回答 1

Stack Overflow用户

发布于 2013-02-27 20:12:22

OnActionExecuted会立即返回,因为在里面你只是在创建和启动一个任务。您正在观察的行为不正常。如果您尝试以下操作,会发生什么情况:

代码语言:javascript
复制
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
    Task.Run(() => Thread.Sleep(10000));
}

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15111716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档