【问题标题】:Concerns about long running thread in WCF Windows Service关于 WCF Windows 服务中长时间运行的线程的担忧
【发布时间】:2017-05-02 00:36:43
【问题描述】:

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

【问题讨论】:

  • 你可以看看像hangfire.io这样的背景资料。这可以在 Windows 服务中运行,并提供持久的后台任务执行。

标签: .net multithreading wcf background-process


【解决方案1】:

我会担心可靠性。这些线程可能因异常或系统重新启动或许多其他可能导致线程丢失的情况而中止。

另外,我想说一劳永逸 方法与可靠性无关:它只是意味着调用者不关心整个操作的结果。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多