Как узнать, была ли задача запущена другой задачей - PullRequest
0 голосов
/ 11 декабря 2018

Мне нужно найти, является ли поток дочерним по отношению к другому.

Ниже приведен упрощенный пример того, что я пытаюсь сделать, но в основном мне нужно сказать, является ли задача дочерней по отношению к другой.задача.

Если у меня есть функция, которая запускает несколько задач ...

_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
  }
}

Iзнать, что текущий thread id изменился бы (из-за асинхронности / ожидания) Можно ли определить, является ли текущая задача / контекст / поток дочерним элементом другого потока?.

1 Ответ

0 голосов
/ 11 декабря 2018

Самое простое решение, просто скажите, кто звонит

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
  }
}
...