为什么TaskFactory.StartNew与Task.ContinueWith结合使用?

时间:2011-10-26 11:55:48

标签: task-parallel-library taskfactory

TaskFactory.StartNew()创建一个新任务,启动它然后返回它。我认为可以安全地假设以下代码将始终有效(因为它来自MSDN):

Task.Factory.StartNew(() => Console.WriteLine("first"))
   .ContinueWith(antecendent => Console.WriteLine("second"));

这是如何工作的?在调用.ContinueWith()之前,如何确保任务尚未开始(或甚至完成)?

1 个答案:

答案 0 :(得分:3)

TPL旨在从使用者中抽象出任务的异步性质,因此如果在已完成的任务上调用ContinueWith,则会立即调用前提处理程序。

这意味着您可以创建Task TaskFactory.StartNew(将安排任务异步运行)或new Task(() => { /*...*/})后跟task.RunSynchronously(),您可以随时拨打ContinueWith Task上的{1}}。它基本上意味着“在任务完成后安排这个运行,或者现在如果它已经完成”。