将来自不同客户端的多个异步回调连接到同一实例工作线程。(.NET/C#)

将来自不同客户端的多个异步回调连接到同一实例工作线程。(.NET/C#),c#,.net,web-services,asynchronous,C#,.net,Web Services,Asynchronous,我这里有一个我无法解决的独特问题。我有一个网络服务。 webservice中的方法创建工作线程以执行长时间运行的操作 void KickStartLongRunningOperation() 但问题是多个客户端依赖于该线程的完成 我还有一个BeginLongRunninOperation(AsyncCallback回调,AsyncState)和EndLongRunningOp。。。一对WebMethod 现在需要的行为是,当主工作线程(LongRunningOperation)完成时,应该调用

我这里有一个我无法解决的独特问题。我有一个网络服务。 webservice中的方法创建工作线程以执行长时间运行的操作

void KickStartLongRunningOperation()
但问题是多个客户端依赖于该线程的完成

我还有一个BeginLongRunninOperation(AsyncCallback回调,AsyncState)和EndLongRunningOp。。。一对WebMethod

现在需要的行为是,当主工作线程(LongRunningOperation)完成时,应该调用来自不同客户端的所有AsyncCallback

如何做到这一点?可能吗?要说明调用序列,请执行以下操作:

  • 客户端1调用->void KickStartLongRunningOperation()->主工作线程启动(仅一个实例)
  • 客户端1调用->BeginXXX提供AsyncCallback作为参数(理想情况下,这应该将此AsyncCallback连接到长时间运行的工作线程的同一实例)
  • 客户端2调用->BeginXXX提供AsyncCallback作为参数(理想情况下,这应该将此AsyncCallback连接到长时间运行的工作线程的同一实例)
  • 客户端3调用->BeginXXX提供AsyncCallback作为参数(理想情况下,应该将此AsyncCallback连接到长时间运行的工作线程的同一实例)

主辅助线程完成
  • 应调用客户端1实例/线程上的AsyncCallback
  • 应调用客户端2实例/线程上的AsyncCallback
  • 应调用客户端3实例/线程上的AsyncCallback

我不想轮询,而是想通过APM进行轮询,但我不确定如何将多个异步回调从不同的客户端实例连接到同一个工作线程。

这里可能需要使用
任务
类和作业管理器?作业管理器保留对正在运行的任务的引用,客户端执行
manager.task.ContinueWith(callback)
。注意这是在webservice中。所以,如果我采用您建议的方法,客户还必须使用任务并行库?您在这里建议的作业管理器是什么?它是任务并行库的一部分,还是我自己的作业管理器实现。你能给我指一下网络上的一些链接或现有的实现代码吗?我指的是你自己的实现,我称之为“工作经理”。它只是用来保存和同步对正在运行的任务的引用。是的,我指的是任务并行库中的
Task
类。