2011-05-27 19 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

这些任务必须执行到 直到完成。

我假设你的意思是你要确保这些任务完成,即使主线程已关闭?

如果主线程关闭,我不会建议根据前台线程保持活动状态。在正常情况下,您可以保持主线程处于活动状态,等待任务完成。您也可以编写一个处理程序,该处理程序可以捕获未处理的异常并进行正常关闭 - 包括等待任务完成。如果某件事情逃脱了未处理的异常陷阱,那么你的过程可能非常腐败,你不应该相信任何结果。

而且,当然,你所做的任何事情都不会阻止用户使用任务管理器或类似的东西来关闭线程。

相关问题