使用Task.StartNew时指定线程名称
本文关键字:线程 Task StartNew 使用 | 更新日期: 2023-09-27 18:13:38
在使用Task.StartNew
方法时是否有办法指定线程的名称
var task = Task.Factory.StartNew(MyAction, TaskCreationOption.LongRunning, ??ThreadName??);
好吧,这行得通:
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列查找回任务。
肯定不是线程名。
线程和任务不是一对一相关的。
您可以使用任务。我想追踪一下。
我更喜欢使用Thread.CurrentThread.ManagedThreadId。它不如名称好,但确实有助于跟踪线程的具体工作。
任务使用线程池,一个线程只能命名一次。你能做的就是使用ThreadStatic变量。然而,它将存在于任务之间,所以在每个任务中再次设置它。
你可以写你自己的TaskScheduler,当它把一个任务放到一个线程上时设置thread. currentthread . name。任务完成后,您的自定义TaskScheduler也可以清除Thread.CurrentThread.Name以避免任何混淆。