2016-10-27 96 views
1

在我的應用程序中,我接收消息和調用的事件。事件是在庫中定義的,所以我只能訂閱。.NET中的任務管理

consumer.Received += (model, ea) => new Task(() => 
{ 
    var body = ea.Body; 
    var message = Encoding.UTF8.GetString(body); 
    Console.WriteLine(message); 
}).Start(); 

我收到消息時運行新的任務。但是,它可能是非常大量的消息和正在運行的任務。我想,當我使用新的Task().Start()它會立即開始,所以我的系統可能會超載。問題是:如何管理任務,而無需創建具有固定數量運行任務的容器,因爲我想使用最多的功能和信任管理.NET。謝謝。

回答

1

這裏,任務排隊到線程池並基於其啓發式執行。

信任管理,.NET

是啊...運行時有什麼任務調度是最優的有限的信息。有時你需要控制。特別是,如果你在做IO。我對CPU限制的工作負載的經驗不多,但是對於默認調度,他們應該更加合適。

很難推薦具體的東西,因爲不清楚代表樣本代碼的實際工作量。如果這是基於IO的,那麼絕對不應該依賴線程池啓發式。 TPL不知道你的IO設備可以做什麼。

在這裏,由於您不使用異步IO(在示例代碼中),如果您想要控制,可以使用TaskScheduler抽象來創建具有有限並行度的任務調度程序。

你可能是最好的測試一個現實的工作量。如果您發現創建的線程太多,您可以將並行度限制爲理智的值。