var nums = ParallelEnumerable.Range(0, 10000); var parent = Task.Factory.StartNew(() => { Console.WriteLine("Parent task starting"); Thread.Sleep(2000); Console.WriteLine("Parent task done"); Task.Factory.StartNew(() => { Console.WriteLine("Child task starting"); Thread.Sleep(5000); Console.WriteLine("Child task done"); }, TaskCreationOptions.AttachedToParent); }); parent.Wait(); Console.WriteLine("Press any key to continue ..."); Console.ReadKey();The console app code above waits for the parent task and will not continue to the next line until not only the parent task is performed and executed, but also its child tasks are finished. In other ways, a task can have multiple child tasks. However, only the child tasks that specifies a TaskCreationOptions set to AttachedToParent will actually be waited upon. Also note that creating a next Task is done using the Task.Factory.StartNew calls. This is the preferred option to create new tasks, but one can also instantiate a Task with the new keyword, but then you have to remember to start the task also. Task.Factory.StartNew not only instantiates a new task but also starts it immediately. In the next short article, the ContinueWith construct in TPL will be presented. This is a construct that allows one to pipeline tasks, one after another. This is known as dataflow parallelism.
Saturday, 12 January 2013
Simple child tasks in TPL
This short article will present some code that displays how to perform the steps necessary to create a child task in the Task Parallel Library (TPL). To create a child task, simple specify the TaskCreationOptions
set to TaskCreationOptions.AttachedToParent.
The simple console application presents this next:
No comments:
Post a Comment