我有一個應用程序需要處理的消息負載(例如:每秒2000)。業務需求要求我不要立即處理消息,而是要等待2秒來處理每條消息。我現在正在做的是從每個消息的Task.Factory.StartNew中分離一個線程池中的線程,並在線程池中執行「等待2秒」的任務。問題是,當消息負載非常高時,我總是會遇到OutOfMemory異常,但根據Windows操作系統的任務管理器,內存消耗實際上並不高。但是,如果我不在線內等待,那麼一切都很好。ThreadPool線程需要等待
我的猜測是,當消息負載很高時,線程池線程不足以處理所有消息。因此越來越多的消息排隊等待處理,當隊列大小變得非常大時,會導致OOM異常。已經嘗試將ThreadPool.SetMaxThreads和ThreadPool.SetMinThreads設置爲非常高的數量,但仍然不起作用。任何建議?
的代碼看起來是這樣的:
ThreadPool.SetMaxThreads(32768, 32768);
ThreadPool.SetMinThreads(2500, 2500);
public void HanldeMessage(string message)
{
Task.Factory.StartNew(() => DoWork(message))
}
public void DoWork(string message)
{
Thread.Sleep(2000);
// do some work to message
}
可能的重複[如何將其轉換爲異步任務?](http://stackoverflow.com/questions/21800450/how-do-i-convert-this-to-an-async-task) – Noseratio