É Task.Factory.StartNew () garantido para usar outro segmento que o segmento de chamada?

Eu estou começando uma nova tarefa de uma função, mas eu não quero que ele seja executado no mesmo segmento. Eu não ligo para qual encadeamento ele é executado, desde que seja diferente (então a informação dada emessa questão não ajuda).

Tenho certeza de que o código abaixo sempre sairáTestLock antes de permitirTask t para entrar de novo? Caso contrário, qual é o padrão de design recomendado para evitar a reentrada?

object TestLock = new object();

public void Test(bool stop = false) {
    Task t;
    lock (this.TestLock) {
        if (stop) return;
        t = Task.Factory.StartNew(() => { this.Test(stop: true); });
    }
    t.Wait();
}

Editar: Com base na resposta abaixo por Jon Skeet e Stephen Toub, uma maneira simples de impedir determinadamente a reentrada seria passar um CancellationToken, como ilustrado neste método de extensão:

public static Task StartNewOnDifferentThread(this TaskFactory taskFactory, Action action) 
 {
    return taskFactory.StartNew(action: action, cancellationToken: new CancellationToken());
}

questionAnswers(4)

yourAnswerToTheQuestion