如何判断一个任务是否由另一个任务启动

时间:2018-12-11 15:11:57

标签: c# multithreading asynchronous

我需要确定一个线程是否是另一个线程的子代。

下面是我尝试做的事情的一个过于简化的示例,但是基本上我需要确定一个任务是否是另一个任务的子代。

如果我有一个可以启动几个任务的函数...

_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将会更改,(因为异步/等待) 是否可以判断当前任务/上下文/线程是否是另一个线程的子代?

1 个答案:

答案 0 :(得分:0)

最简单的解决方案,只需告诉谁是呼叫者

private string task1Name = "task1";
private string task2Name = "task2";

_task1 = FuncA(task1Name );
_task2 = FuncA(task2Name );

public async Task FuncA(sting taskName)
{
  // do something
  await Task.Delay(500, CancellationToken.None).ConfigureAwait(false);

  // then call the other function
  await FuncB(taskName).ConfigureAwait(false);
}

public async Task FuncB(string parentName)
{
  // now check for the 'parent'
  if( parentName == task1Name ) // <--- something similar 
  {
    // child of first task
  }
}