将上下文对象传递给异步操作

时间:2015-04-06 11:33:23

标签: .net asp.net-mvc asynchronous

我有一个MVC4应用程序,我有几个实例,在一些方法调用上“发射并忘记”是有益的。这些方法运行时间较长,不应阻止响应给用户。我意识到异步控制器方法对我没有帮助,但在一个特定的控制器方法中,我想调用一个方法,使用await关键字来对抗异步函数。

很简单,但是对于每个请求,应用程序都会构建一个[ThreadStatic]上下文,该上下文可用于链中的任何方法调用。此上下文包含当前用户等内容。

因此异步方法也需要此上下文。是否有一个首选模式将这个上下文传递给异步方法,而不是简单地将其传递给方法本身?这可以做到,但感觉不太正确。

1 个答案:

答案 0 :(得分:2)

最佳方法是将其传递给方法,或使用依赖注入库。

然而,如果你确实想传递一个"环境"在没有实际将其作为参数传递的情况下,您可以使用逻辑调用上下文(CallContext.LogicalGetData / CallContext.LogicalSetData)来存储不可变数据。我有一个更详细的写作on my blog