2011-11-07 21 views
25

¿Hay una manera de especificar el nombre de un hilo cuando se utiliza el método de Task.StartNewespecificar el nombre de un hilo cuando se utiliza Task.StartNew

var task = Task.Factory.StartNew(MyAction, TaskCreationOption.LongRunning, ??ThreadName??); 
+0

¿Para qué quieres incluso nombrar tu hilo? –

+0

Los hilos reales tienen (pueden) tener nombres. Pero las tareas no. –

+15

@Ron depuración !! – Jon

Respuesta

16

No es un nombre de rosca con seguridad.

Los hilos y las tareas no están relacionados de 1 a 1.

Puede usar Task.Id para rastrearlo.

+1

Tengo una tarea de larga ejecución, lo que significa que se ha creado un nuevo hilo y yo quería ponerle el nombre – Jon

+8

No, se podría crear un nuevo Thread * might *. –

+1

Pensé que LongRunning garantiza un nuevo hilo – Jon

28

Bueno, esto funciona:

class Program { 
    static void Main(string[] args) { 
     var task = Task.Factory.StartNew(() => { 
      Thread.CurrentThread.Name = "foo"; 
      Thread.Sleep(10000); // Use Debug + Break to see it 
     }); 
     task.Wait(); 
    } 
} 

Hay un problema, sin embargo, el hilo de subprocesos se recicla y no va a cambiar su nombre. Esto puede ser confuso, lo verá funcionando más tarde ejecutando un código completamente diferente. Asegúrate de tomar nota de esto. Su mejor opción es utilizar la columna Ubicación en la ventana de depuración + subprocesos de Windows + para recuperar la tarea.

0

Puede escribir su propio TaskScheduler que establece Thread.CurrentThread.Name cuando coloca una tarea en un hilo. Una vez realizada la tarea, el TaskScheduler personalizado también puede borrar Thread.CurrentThread.Name para evitar confusiones.

+2

Eso no es posible en realidad, una vez que se ha establecido la propiedad de nombre de un subproceso, ya no se puede modificar. – ChriPf

2

Prefiero usar Thread.CurrentThread.ManagedThreadId. No es tan bueno como un nombre, pero ayuda a rastrear el trabajo específico de un hilo.

Cuestiones relacionadas