I find naming threads to be very useful when debugging.
I can see no way to name a thread using arguments to Task.Factory.StartNew()
So is it acceptable to name the thread explicitly in the task? eg:
private void MyFunc()
{
Task.Factory.StartNew(() =>
{
Thread.CurrentThread.Name = "Foobulizer";
Foobulize();
});
}
However, I appreciate that threads may be reused for different tasks, so would I need to explicitly reset the thread name at the end of the task? This feels pretty hacky so I’m thinking this is probably a bad idea, or there’s a proper way to do it?
You cannot do this since multiple Tasks can share the same or multiple threads depending on ThreadPool state in a given moment of time. Basically, Task is not a Thread. It’s just a high level abstraction for the asynchronous operation. You can use the Task.Id property, but keep in mind that
Idis readonly and ofinttype, so you can’t assign custom user-friendly name.Take a look at the built-in Visual Studio 2010 Parallel Debugging features. Perhaps you’ll find another approach: Walkthrough: Debugging a Parallel Application
Parallel Tasks Window: