跨异步WCF REST服务中的线程的上下文

Bit*_*777 5 c# rest wcf multithreading asynchronous

我正在使用202方法创建异步REST API .我必须在WCF(而不是Web API)中实现它,我的计划是生成一个新线程来执行异步工作,同时让WCF操作线程返回202.我遇到的问题是我的一些遗留代码需要在新线程中使用期望OperationContext和HttpContext来存储和检索上下文信息.我知道这两个都是特定于线程的,因此在生成的线程中为null.

我有两个问题:

  1. 有没有安全的方法将OperationContext和/或HttpContext传播到新线程?
  2. 如果我能够修改遗留​​代码以远离OperationContext和HttpContext,是否有推荐的方法在WCF设置中跨线程共享上下文信息?

Phi*_*rdt 1

  1. 您将负责确保您生成的任何线程都收到必要的上下文。WCF 仅负责确保 OperationContext 与其启动的任何线程切换一起流动,这就是为什么 anIExtension<OperationContext>是存储上下文数据的推荐方法。一旦你离开大楼,你就只能靠自己了……

  2. 对于在线程池上生成任务,典型的方法是准备任何必要的上下文信息,然后将其传递给委托,例如Task.Run(() => doLongRunningTask(contextCopiedFromOperationContext))。然后,委托将负责ThreadLocal<T>在调用实际的长时间运行的实现之前填充对象(或您希望使用的任何机制)。