c# - 如何查询线程中的任务
问题描述
我的目标是给执行任务的线程一个名称,例如“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
解决方案
任务概念是对“低级”线程概念的抽象(请参阅更多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#?)
我的建议只是将任务的名称作为输入参数传递,特别是如果它只是为了记录原因。
推荐阅读
- react-native - 我收到此错误:操作必须是普通对象。使用自定义中间件进行异步操作
- haskell - Repl 的 Haskell 沙箱甚至跳过了 getLine 输入
- python - 在 Altair 中,如何设置折线图中连接点的大小?
- javascript - 如何在其他网站上嵌入 React 组件?
- android - libc:致命信号 11(SIGSEGV),代码 1,tid 29032 中的故障地址 0x7129621350(AudioRecord)
- jupyter-notebook - Jupyter 笔记本中的“{{ var }}”语法未在 Jupyter 实验室中呈现 [Python Markdown 缺失?]
- python - 如何使用带和不带标志的 argparse 参数?
- java - 带有 LocalDateTime 的 SpringBoot2 @DateTimeFormat 注释不能按我的预期工作
- unity3d - 无法让 #pragma multi_compile 为此着色器属性工作
- reactjs - 在反应树组件中管理状态