Гарантируется ли Task.Factory.StartNew () использовать другой поток, а не вызывающий поток?

Я запускаю новую задачу из функции, но не хотел бы, чтобы она выполнялась в том же потоке. Я нене важно, в каком потоке он работает, если он другой (поэтому информация, приведенная вэтот вопрос не помогает).

Я гарантированно, что приведенный ниже код будет всегда выходитьTestLock прежде чем позволитьTask t ввести его снова? Если нет, каков рекомендуемый шаблон проектирования для предотвращения повторного входа?

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();
}

Редактировать: Исходя из приведенного ниже ответа Джона Скита и Стивена Тауба, простым способом детерминированного предотвращения повторного входа будет передача CancellationToken, как показано в этом методе расширения:

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

Ответы на вопрос(4)

Ваш ответ на вопрос