使用Task.StartNew
方法
var task = Task.Factory.StartNew(MyAction, TaskCreationOption.LongRunning, ??ThreadName??);
答案 0 :(得分:33)
嗯,这很有效:
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();
}
}
然而,有一个问题,线程池线程被回收并且不会更改其名称。这可能令人困惑,你会看到它在以后执行完全不同的代码。一定要注意这一点。否则,最好使用Debug + Windows + Threads窗口中的Location列来重新找回任务。
答案 1 :(得分:17)
肯定不是线程名称。
线程和任务不是一对一的。
您可以使用Task.Id进行跟踪。
答案 2 :(得分:2)
我更喜欢使用Thread.CurrentThread.ManagedThreadId。它不如名称好,但确实有助于跟踪线程的具体工作。
答案 3 :(得分:0)
任务使用线程池,一个线程只能命名一次。您可以使用ThreadStatic变量。但是,它将在任务之间存在,因此请在每个任务中再次设置它。
答案 4 :(得分:-1)
您可以编写自己的TaskScheduler,在将任务放在线程上时设置Thread.CurrentThread.Name。任务完成后,您的自定义TaskScheduler也可以清除Thread.CurrentThread.Name以避免混淆。