我有1集合,我正在將內容保存到持久存儲。然後我最終得到了3個我喜歡保存到持久存儲的集合。使用線程池或線程
起初我使用一個ThreadPool來保存一個集合,但現在我有3個集合。由於每個集合都去了不同的存儲,我不想將它們合併或保存到同一個地方。
我的問題是我應該使用手動線程併爲每個Save()方法創建一個線程,或者應該爲每個方法創建3個線程池,還是應該在一個ThreadPool.QueueUserWorkItem調用中調用所有3個方法。
1.首先方法
ThreadPool.QueueUserWorkItem(o =>
{ Save<Foo>(ConcurrentCollectionStorage.Bus1);
Save<Bar>(ConcurrentCollectionStorage.Bus2);
Save<Car>(ConcurrentCollectionStorage.Bus3);
});
2.第二種方法
ThreadPool.QueueUserWorkItem(o =>
{ Save<Foo>ConcurrentCollectionStorage.Bus); });
ThreadPool.QueueUserWorkItem(o =>
{ Save<Bar>(ConcurrentCollectionStorage.Bus2); });
ThreadPool.QueueUserWorkItem(o =>
{ Save<Car>(ConcurrentCollectionStorage.Bus3); });
3.第三條道路。手動創建線程並加入它們。
在做這些操作時,我不希望我的應用程序掛起。我希望它能夠處理和保存數據,並完成整個應用程序,但不會影響前臺進程。
這樣做的最好方法是什麼?
我應該使用哪一個?有一個更好的方法嗎?
線程購買更多的CPU週期,而不是更多的磁盤。目前尚不清楚關鍵資源在哪裏,但很可能不是cpu週期。 –
要跟從@Hans Passant,爲什麼要使用3個線程?你能不能將所有3個集合排成一個線程?您可以將所需的目標服務器/文件夾/任何內容加載到每個項目中,以便線程知道將它放在哪裏。 –
是的,這不是很受CPU限制,但我希望它們在不影響應用程序的情況下發生,這就是爲什麼我想將它們作爲線程池運行的原因。你能想到更好的東西嗎? – DarthVader