将上下文对象传递给异步操作
Passing context object to async operation
我有一个 MVC4 应用程序,我有几个实例,在几个方法调用中 "fire and forget" 是有益的。这些方法更长 运行,不应阻止对用户的响应。我意识到异步控制器方法在这里对我没有帮助,但在一个特定的控制器方法中,我想调用一个使用 await 关键字来对抗异步函数的方法。
很简单,但是对于每个请求,应用程序都会建立一个 [ThreadStatic] 上下文,该上下文可供链中的任何方法调用使用。此上下文包含当前用户等内容
所以异步方法也需要这个上下文。除了简单地将此上下文传递给方法本身之外,是否有将此上下文传递给异步方法的首选模式?可以做,但是感觉不太对。
最好的方法是将其传递到方法中,或者使用依赖注入库。
但是,如果您确实想传递一个 "ambient" 上下文而不将其实际作为参数传递,那么您可以使用逻辑调用上下文 (CallContext.LogicalGetData
/ CallContext.LogicalSetData
)存储不可变数据。我有更详细的文章 on my blog.
我有一个 MVC4 应用程序,我有几个实例,在几个方法调用中 "fire and forget" 是有益的。这些方法更长 运行,不应阻止对用户的响应。我意识到异步控制器方法在这里对我没有帮助,但在一个特定的控制器方法中,我想调用一个使用 await 关键字来对抗异步函数的方法。
很简单,但是对于每个请求,应用程序都会建立一个 [ThreadStatic] 上下文,该上下文可供链中的任何方法调用使用。此上下文包含当前用户等内容
所以异步方法也需要这个上下文。除了简单地将此上下文传递给方法本身之外,是否有将此上下文传递给异步方法的首选模式?可以做,但是感觉不太对。
最好的方法是将其传递到方法中,或者使用依赖注入库。
但是,如果您确实想传递一个 "ambient" 上下文而不将其实际作为参数传递,那么您可以使用逻辑调用上下文 (CallContext.LogicalGetData
/ CallContext.LogicalSetData
)存储不可变数据。我有更详细的文章 on my blog.