The task gives you all the goodness of the task API:
- Adding continuations (
Task.ContinueWith
)
- Waiting for multiple tasks to complete (either all or any)
- Capturing errors in the task and interrogating them later
- Capturing cancellation (and allowing you to specify cancellation to start with)
- Potentially having a return value
- Using await in C# 5
- Better control over scheduling (if it's going to be long-running, say so when you create the task so the task scheduler can take that into account)
Note that in both cases you can make your code slightly simpler with method group conversions:
DataInThread = new Thread(ThreadProcedure);
// Or...
Task t = Task.Factory.StartNew(ThreadProcedure);