Gaz*_*yer 17 c# multithreading task-parallel-library
我发现命名线程在调试时非常有用.
我看不到使用参数命名线程的方法 Task.Factory.StartNew()
那么在任务中明确命名线程是否可以接受?例如:
private void MyFunc()
{
Task.Factory.StartNew(() =>
{
Thread.CurrentThread.Name = "Foobulizer";
Foobulize();
});
}
Run Code Online (Sandbox Code Playgroud)
但是,我知道线程可能会被重用于不同的任务,所以我需要在任务结束时显式重置线程名称吗?这感觉非常hacky所以我认为这可能是一个坏主意,或者有一个正确的方法来做到这一点?
sll*_*sll 16
您无法执行此操作,因为多个任务可以共享单个或多个线程,这取决于给定时刻的ThreadPool状态.基本上Task不是一个Thread,它只是异步操作的高级抽象.您可以使用Task.Id属性,但请记住Id只读和int类型,因此您无法分配自定义用户友好名称.
任务ID按需分配,并不一定代表创建任务实例的顺序
看看内置的Visual Studio 2010并行调试功能,也许您会找到另一种方法:演练:调试并行应用程序
并行任务窗口:

对于每个正在运行的任务,您可以读取其ID,该ID由同名属性返回,运行它的线程的ID和名称,其位置(悬停在其上显示具有整个调用堆栈的工具提示).此外,在"任务"列下,您可以看到传递给任务的方法; 换句话说,出发点
默认TaskScheduler使用.NET ThreadPool来安排任务.因此,您将获得一个已经存在的线程或一个将被重用的线程(可能,但可能).
请注意,您只能命名一次线程.第二次打电话Thread.CurrentThread.Name会提出一个问题InvalidOperationException.当它是线程池线程时,这尤其糟糕.
通常,您不应更改您未(明确)创建或拥有的线程的属性(名称为1,优先级为其他突出的候选者).
| 归档时间: |
|
| 查看次数: |
14201 次 |
| 最近记录: |