【发布时间】:2018-12-11 15:11:56
【问题描述】:
我需要查找一个线程是否是另一个线程的子线程。
下面是我正在尝试做的一个过于简单的示例,但基本上我需要判断一个任务是否是另一个任务的子任务。
如果我有一个启动几个任务的函数...
_task1 = FuncA();
_task2 = FuncA();
在那个函数中,它开始另一个任务
public async Task FuncA()
{
// do something
await Task.Delay(500, CancellationToken.None).ConfigureAwait(false);
// then call the other function
await FuncB().ConfigureAwait(false);
}
public async Task FuncB()
{
// now check for the 'parent'
if( IsChildTask(_task1) ) // <--- something similar
{
// child of first task
}
}
我知道当前的thread id 会改变,(因为 async/await)
是否可以判断当前任务/上下文/线程是否是另一个线程的子线程?。
【问题讨论】:
-
Task FuncB(bool isChild=false)似乎是最简单的解决方案 -
也就是说这很像XY Problem
-
不,因为(在我的简化示例中)
FuncA()的创建方式完全相同。他们都以FuncB()开头,但我怎么知道它是从_task1还是_task2“创建”的? -
你想对父任务做某事还是只知道哪个任务是父任务?
-
无法“识别”
Tasks 的父级,任务不保存此信息。另请记住,Task 可能会在任何时候切换Thread(有点),因此您也不能依赖 Thread id。您需要记住,Task是概念上的,而不是物理上的,与Thread不同。您可能会编写某种包含 id (Tasks do have ids) 的包装器,但是您需要自己管理所有这些。我仍然认为这是一个 XY 问题。
标签: c# multithreading asynchronous