How to name a thread running a Task?
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 Id
is readonly and of int
type, so you can't assign custom user-friendly name.
Task IDs are assigned on-demand and do not necessarily represent the order in the which Task instances were created
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:
For each running Task, you can read its ID, which is returned by the same-named property, the ID and name of the thread that runs it, its location (hovering over that displays a tooltip that has the whole call stack). Also, under the Task column, you can see the method that was passed into the task; in other words, the starting point
The default TaskScheduler
uses the .NET ThreadPool
to schedule the tasks. So you will get a thread that already exists or one that will be reused (both potentially, but likely).
Note that you can only name a thread once. The second attempt to call Thread.CurrentThread.Name
will raise an InvalidOperationException
. This is particularly bad when it is a thread pool thread.
In general you should not change attributes of a thread that you did not (explicitly) create or own (the name being one, the priority being the other prominent candidates).