2011-05-27 75 views
5

MSDN文檔指出由TPL啓動的線程將享受更好的調度。但是,由於線程基於ThreadPool,它們將作爲後臺線程實現。任務並行庫作爲前臺線程可以啓動線程嗎?

現在,我想同時執行一些任務,但這些任務必須執行直到完成。

那麼,我該如何創建基本上是前臺線程的任務,但仍然享受TPL提供的增強型調度?

+0

你能概括一下這個場景嗎?他們是完全獨立的失火作業嗎? – 2011-05-27 20:10:03

回答

4

TPL並不真的給你提供線程,它可以讓你創建任務。任務可以在不同的線程上執行,所以Task!= Thread。

與普通的Threadpool一樣,改變任何Thread屬性也不是一個好主意。

但是,通過等待主線程中的任何未完成任務,您可以輕鬆解決問題。你通常也想捕捉並處理他們的例外情況。

+0

謝謝!現在我只是創建一個簡單的非後臺線程,等待任務完成。接受你的答案。 – pepoluan 2011-06-08 09:35:28

7

你可以編寫自己的TaskScheduler實現。看看samples的實例TaskScheduler - 希望它從那裏相對簡單。

+0

好樣品鏈接。 – radbyx 2012-03-14 12:08:50

+0

該鏈接現在被打破。我認爲這是等效的:https://code.msdn.microsoft.com/ParExtSamples – Holf 2016-01-18 12:20:45

+0

@Holf:謝謝,修正。 – 2016-01-18 12:25:42

0

IsBackground屬性可以將分配給。雖然我不確定這是「好的」還是「不在頭腦裏」。

快樂編碼。

0

這些任務必須執行到 直到完成。

我假設你的意思是你要確保這些任務完成,即使主線程已關閉?

如果主線程關閉,我不會建議根據前臺線程保持活動狀態。在正常情況下,您可以保持主線程處於活動狀態,等待任務完成。您也可以編寫一個處理程序,該處理程序可以捕獲未處理的異常並進行正常關閉 - 包括等待任務完成。如果某件事情逃脫了未處理的異常陷阱,那麼你的過程可能非常腐敗,你不應該相信任何結果。

而且,當然,你所做的任何事情都不會阻止用戶使用任務管理器或類似的東西來關閉線程。

相關問題