关注WCF Windows服务中长时间运行的线程

时间:2017-05-02 00:36:44

标签: .net multithreading wcf background-process

我们正在使用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

1 个答案:

答案 0 :(得分:2)

我会担心可靠性。这些线程可以被中止,因为异常或系统重启,或者线程可能丢失的许多其他情况。

另外,我说 fire and forget 方法与可靠性无关:它只是意味着调用者并不关心整个操作的结果。

因此,我会寻找像 RabbitMQ 这样的可靠消息队列。也就是说,您将在触发这些操作的另一个线程中异步处理这些 fire并忘记操作,如果出现问题,您将能够重试它们在他们成功结束之前。