簡體   English   中英

Threadpool或TPL用於長時間運行的任務

[英]Threadpool or TPL for a long running tasks

我有一個Windows服務,經過漫長的過程后發送電子郵件。 只要有表條目並處理它並將其發送出去,此服務就會繼續從數據庫表中獲取電子郵件數據。

目前它是一個多線程應用程序,我們在生產服務器中配置最多25個線程計數(僅用於此目的),因為這意味着24x7x365運行。 但我們看到只有2個活動線程在運行。 可能是什么原因?

此外,我希望使用線程池或TPL更改線程代碼。 你能否建議我一個更好的方法來處理這種情況?

提前致謝 !

//下面的示例代碼

    Thread[] threads;
    int ThreadCount = 25;
    private void StartProcess()
    {
        //Create new threads 
        if (Threads == null)
        {
            // Create array of threads based on the configuration
            threads = new Thread[ThreadCount];
            for (int i = 0; i < ThreadCount; i++)
            {
                Thread[] threads[i] = new Thread(new ThreadStart(SendEmail));
                threads[i].Start();
            }
        }
        else
        {
            resume it if exists
            for (int j = 0; j < threads.Length; j++)
            {
                if (threads[j].ThreadState == Threading.ThreadState.Suspended)
                {                        
                    threads[j].Resume();
                }
            }
        }
    }
   public void SendEmail()
    {
        while (Thread.CurrentThread.ThreadState == System.Threading.ThreadState.Running)
        {
              // send email code
            Thread.Sleep(duration);
        }
    }

你沒有看到25個線程的原因可能是當線程改變狀態時線程方法SendEmail可能會退出。 一旦退出,線程就會消失,無法恢復。

我想你可能想在while循環中使用不同的條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM