我正在研究任务并行库的使用,这是我正在做的一个工作项目,我想了解长时间运行任务的优缺点。我还没有真实的例子,只是想了解其背后的理论。
从MSDN页面关于任务调度程序和这个SO问题所说的来看,似乎最好尽可能避免长时间运行的任务,这样就不会在线程池外创建线程。但是,假设你确实有一个需要很长时间才能完成的任务,那么可以考虑以下方式:
这种方法是否更有益,还是为了达到目的而过度了呢?
从MSDN页面关于任务调度程序和这个SO问题所说的来看,似乎最好尽可能避免长时间运行的任务,这样就不会在线程池外创建线程。但是,假设你确实有一个需要很长时间才能完成的任务,那么可以考虑以下方式:
Task.Factory.StartNew(() => DoTimeConsumingWork(), TaskCreationOptions.LongRunning)
你能否尝试将工作分解成更小、更快的工作单元,并使用任务继续,就像这样:
Task.Factory
.StartNew(() => DoWorkPart1())
.ContinueWith(t => DoWorkPart2())
.ContinueWith(t => DoWorkPart3())
//...etc
这种方法是否更有益,还是为了达到目的而过度了呢?