首页 > 解决方案 > 如何查询线程中的任务

问题描述

我的目标是给执行任务的线程一个名称,例如“WorkerForXY”。但我不想在任务中命名线程。

什么有效,但我不想要:

Task.Factory.StartNew(() =>
    {
       Thread.CurrentThread.Name = $"WorkerFor{taskName}";
       // some code
    }, TaskCreationOptions.LongRunning);

我想做的事:

var task = Task.Factory.StartNew(() =>
    {
       // some code
    }, TaskCreationOptions.LongRunning);
task.GetAssignedWorkerThreadIfAvailable().Name = $"WorkerFor{taskName}";    // or something similar

我认为可能有一个解决方案,因为 Visual Studio 可以创建这样的映射: 在此处输入图像描述

标签: c#.netmultithreadingtasktask-parallel-library

解决方案


任务概念是对“低级”线程概念的抽象(请参阅更多https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/task-parallel-library-tpl),因此尝试获取或通过 Task 实例设置线程属性不是一个合适的决定(您可以通过该问题查看 go dipper How to get the reference of TPL task's thread in C#?

我的建议只是将任务的名称作为输入参数传递,特别是如果它只是为了记录原因。


推荐阅读