簡體   English   中英

任務在通話后幾秒鍾運行

[英]Task running few seconds after the call

我有一個接收消息的服務,將收到的每條消息發送給一個實例,然后將其發送給新Task,因此消息的處理操作將是異步的

public void ReceiveMessage(string Message) {
      Logger.Logger.Log($"Receive Message {Message} in METHOD method");  
      //see in the log time stamp 12:13:51.000
                Task.Factory.StartNew(() =>
                {
                    Logger.Logger.Log($"Receive Message  {Message} in TASK method"); 
                    //see in the log time stamp 112:13:53.000

                    processMessage(Message);
                });
}

private void processMessage(string message) {
     //do some processing job
}

服務中從不同的客戶端收到很多消息,每條消息發送到不同的實例, ReceiveMessageprocessMessage是每個實例的方法,因此在調用方法和啟動任務之間有2秒的延遲-有誰知道為什么這可能會發生,如何避免呢?

我以為C#能夠管理自己的線程池...

可以同時運行的Task數量有限,請檢查Task.Factory.Scheduler.MaximumConcurrencyLevel的屬性

任務並行庫和PLINQ的默認調度程序使用ThreadPool類表示的.NET Framework線程池來排隊和執行工作。 線程池使用Task類型提供的信息來有效地支持並行任務和查詢經常表示的細粒度並行性(短期工作單元)。

但是, ThreadPool池的大小取決於幾個因素:

每個進程只有一個線程池。 從.NET Framework 4開始,進程的線程池的默認大小取決於幾個因素,例如虛擬地址空間的大小。 進程可以調用GetMaxThreads方法來確定線程數。 可以使用SetMaxThreads方法更改線程池中的線程數。 每個線程使用默認堆棧大小,並以默認優先級運行。

TheadPool- https: //msdn.microsoft.com/zh-CN/library/system.threading.threadpool.aspx

暫無
暫無

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

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