任务并行库启动的线程可以作为前台线程吗?

时间:2011-05-27 19:33:06

标签: .net multithreading task-parallel-library

MSDN文档表明由TPL启动的线程将享有更好的调度。但是,由于线程基于ThreadPool,因此它们将实现为后台线程。

现在,我希望并行完成一些任务,但必须执行这些任务直到完成。

那么,我如何创建本质上是前台线程的任务,但仍然享受TPL提供的增强调度?

4 个答案:

答案 0 :(得分:7)

您可以编写自己的TaskScheduler实现。请查看samples中有关实施TaskScheduler的示例 - 希望它在那里相对简单。

答案 1 :(得分:4)

TPL并没有真正为您提供线程,它可以让您创建任务。任务可以在不同的线程上执行,因此Task!= Thread。

与普通的Threadpool一样,改变任何Thread-properties都不是一个好主意。

但是,通过等待主线程中的任何未完成任务,您可以轻松解决问题。您通常也希望捕获并处理它们的异常。

答案 2 :(得分:0)

可以分配IsBackground属性。我不确定这是“好”还是“不是裤子上的哑巴”。

快乐的编码。

答案 3 :(得分:0)

  

这些任务势在必行   进行到完成。

我认为你的意思是你想确保即使主线程关闭也能完成这些任务?

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

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