我们正在使用WCF服务并将其托管在我们的Windows服务中。这个概念解释为here。
我们有一个WCF服务调用,如下所示:
[System.ServiceModel.OperationContractAttribute(...)]
[System.ServiceModel.FaultContractAttribute(...)]
void TriggerLongRunningOperation(int id);
在这个WCF调用中,我们分离了一些即发即弃的新线程来完成一些后台任务。在大多数情况下,只有一个,但可能有多个。 WCF请求基本上立即完成,而“即发即弃”线程执行其工作。
Task task = Task.Run(() =>
{
// some stuff.
});
分离的操作可以持续2分钟到1小时。
我担心在WCF流程中有一个长时间运行的线程,但是,由于它不是通过IIS托管的,我们不必担心应用池的回收。
在Windows服务中托管的WCF服务中运行新线程时,我应该注意哪些问题?线程将被中止的情况是什么?
.NET 4.5.2
答案 0 :(得分:2)
我会担心可靠性。这些线程可以被中止,因为异常或系统重启,或者线程可能丢失的许多其他情况。
另外,我说 fire and forget 方法与可靠性无关:它只是意味着调用者并不关心整个操作的结果。
因此,我会寻找像 RabbitMQ 这样的可靠消息队列。也就是说,您将在触发这些操作的另一个线程中异步处理这些 fire并忘记操作,如果出现问题,您将能够重试它们在他们成功结束之前。