我正在使用202 approach创建异步REST API。我必须在WCF(而不是Web API)中实现它,我的计划是生成一个新线程来执行异步工作,同时让WCF操作线程返回202.我遇到的问题是我的一些遗留代码需要在新线程中使用期望OperationContext和HttpContext来存储和检索上下文信息。我知道这两个都是特定于线程的,因此在生成的线程中为null。
我有两个问题:
答案 0 :(得分:1)
您将负责确保您生成的任何线程都获得必要的上下文。 WCF仅负责确保OperationContext流与它启动的任何线程切换,这就是IExtension<OperationContext>
是存储上下文数据的推荐方法的原因。一旦你离开大楼,你就独自一人......
对于线程池上的产生任务,典型的方法是准备任何必要的上下文信息,然后将其传递给代理人,例如Task.Run(() => doLongRunningTask(contextCopiedFromOperationContext))
。然后,委托将负责在调用实际长时间运行的实现之前填充ThreadLocal<T>
个对象(或您希望使用的任何机制)。