.net - 如果生成的线程仍在工作,则使Web服务保持事件状态

标签 .net multithreading web-services application-pool

我有一个Web服务,将由每晚的工作流程文档调用,每个文档都将在其自己的后台处理器中排队并执行。此过程可能需要几个小时或几分钟的时间,具体取决于负载。如果它什么也没做,我不想让它活着。但是,当产生一个线程并立即返回时,即使有一个线程在工作,空闲时钟也会开始。我尚未将线程设置为IsBackground,并且仍因空闲而终止。为了测试,我将空闲时间设置为1分钟。有没有一种方法可以使服务保持“在线”状态

这是网络服务代码:

public class LetterInitiateWS : System.Web.Services.WebService
    {

        private static Processor processor = new Processor();
        [WebMethod]
        public void ExecuteBulkRun()
        {
            var thrd = new Thread(() => ThreadExecuteBulkRun());
            thrd.IsBackground = false;
            thrd.Start();

        }

        private void ThreadExecuteBulkRun()
        {
            processor.ExecutBulkRun();
        }

    }

最佳答案

我认为您最好的选择是将其分为两个独立的过程。您将在基于IIS/ASP.NET的过程中遇到麻烦,并尝试使其保持 Activity 状态。

如果我是你,我会做类似的事情:

  • 将记录写入DB/File/queue中,以指示长时间运行的线程必须启动。
  • 让Windows服务监视DB/文件/队列中的信号,然后开始处理。

  • 您会在这里的答案中找到类似的建议:

    Handling Web Service Timeouts While Performing Long-Running Database Tasks

    Long running webservice architecture

    Recommendations for designing a long-running, resource-intensive web service

    关于.net - 如果生成的线程仍在工作,则使Web服务保持事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4350660/

    相关文章:

    multithreading - boost 互斥量 C++/CLI 问题

    java - Liferay json网络服务: url access not working?

    c# - 存储过程有时返回short,有时返回int

    .net - .net 中泛型类型的属性约束?

    java - 对象池通知不起作用

    java - 了解 Java 并发中的外来方法

    java - ERROR 411 在 java 中使用 API(POST 方法)

    asp.net - 从 asmx Web 方法中的 .NET 序列化字符串向 JSON 对象的根属性添加额外属性

    c# - 查找时间序列中的开始和停止

    c# - 使用Reader Writer Lock创建线程安全列表