问题描述
|
MSDN文档指出,由TPL启动的线程将享有更好的调度。但是,由于线程基于ThreadPool,因此它们将被实现为后台线程。
现在,我想并行执行一些任务,但是必须将这些任务执行到完成。
因此,如何创建本质上是前台线程但仍享受TPL提供的增强调度功能的任务?
解决方法
TPL并没有真正为您提供线程,而是让您创建任务。任务可以在不同的线程上执行,因此Task!= Thread。
与普通的Threadpool一样,更改任何Thread-properties都不是一个好主意。
但是,通过等待主线程中的所有未完成任务,可以轻松解决您的问题。您通常也想捕获并处理它们的异常。
, 您可以编写自己的“ 0”实现。在示例中查看实现ѭ0的示例-希望从那里开始比较简单。
, 可以将“ 2”属性分配给它。我不确定这是“好吗”还是“非傻瓜傻瓜”。
快乐的编码。
,
必须将这些任务
进行到完成。
我假设您的意思是即使主线程已关闭,您也要确保这些任务完成?
如果主线程关闭,我不建议依赖于前台线程保持活动状态。在正常情况下,您可以保持主线程处于活动状态,等待任务完成。您还可以编写一个处理程序,该处理程序可以捕获未处理的异常并进行正常关闭-包括等待任务完成。如果某些事情逃避了您未处理的异常陷阱,那么您的流程可能非常腐败,您不应该相信任务所交付的任何结果。
而且,当然,您所做的任何事情都不会阻止用户使用任务管理器或类似工具关闭线程。