【问题标题】:Task running after request returns, any concerns?请求返回后任务运行,有什么问题吗?
【发布时间】:2013-07-26 20:33:29
【问题描述】:

我正在制作一个 ASPNET MVC 解决方案,我使用 async/await 来发出一些外部请求。当任务通过调用 Task.WhenAll 完成时,我有一个 ContinueWith,我将一些数据保存到数据库中。 我对 async/await 有点陌生,我发现在实际调用 ContinueWith 之前,对我的操作的请求返回并更新了 UI。这也意味着如果我需要用户身份,则必须在拥有请求上下文时将其传递给 Continue with。 现在我需要做一些特别的事情来确保服务器在返回 ActionResult (aspnet mvc) 之后真正处理请求吗?我记得看过一些关于 RunInBackground 的东西,但我找不到了。

Action中的代码是这样的

await Task.WhenAll(tasks).ContinueWith(OnTagsMetaCollected, result);


    return Json(result, JsonRequestBehavior.AllowGet);

首先我做了一些任务,这些任务都被执行了。当一切都完成后,我想计算一些新结果,这些结果在 OnTagsMetaCollected 中完成,并添加到结果中(列表) 修改后的结果从action中返回。

我不确定这是解决这个问题的最佳结构,所以我欢迎任何建议:)。

【问题讨论】:

    标签: asp.net-mvc async-await


    【解决方案1】:

    解决方案很简单:使用await 而不是ContinueWithawait 将正确地将请求上下文(包括用户身份)传递给 async 方法的其余部分。

    【讨论】:

    • 所以我刚刚使用 await 进行了测试,我想我可能做错了什么,因为在我的任务完成之前请求仍然返回。查看更新
    • 啊,我刚刚删除了 continueWith 正如你所说的那样,它现在似乎可以工作了,而且流程更加干净。
    猜你喜欢
    • 1970-01-01
    • 2015-07-10
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 2020-05-06
    • 1970-01-01
    • 2016-10-08
    相关资源
    最近更新 更多