Cómo retrasar las tareas 'activas' para que puedan procesarse en un orden establecido

Digamos que tengo un conjunto de tareas:

        var task1 = DoThisAsync(...);
        var task2 = DoThatAsync(...);
        var task3 = DoOtherAsync(...);
        var taskN...

Estoy buscando una manera de procesar un conjunto de tareas en orden (determinado por el lugar en la colección que contiene, por ejemplo), pero para que las tareas solo se ejecuten / comiencen cuando sea su turno y no antes, y tener todo eso envuelto en su propia tarea

Las restricciones / detalles del problema son:

Estas tareas deben realizarse en un cierto orden, es decir, tarea1, tarea2, ...La tarea anterior debe completarse de forma asíncrona antes de que pueda comenzar la siguiente.El número de tareas es variable.Se puede designar un conjunto diferente de tareas cada vez que se ejecuta el códigoEl orden y el número de tareas se conocen de antemano.

El principal problema es que tan pronto como llamo al método relevante (como DoThis () ...) para devolver cada tarea, esa tarea ya está 'activa' o ejecutándose, violando (2) arriba.

He intentado trabajar con .ContinueWith (..), pero si llamo a cada una de las tareas como las anteriores para establecer las continuaciones o agregarlas a una lista o colección, ya han comenzado.

¿No está seguro si Lazy <T> podría ayudar pero no puede ver cómo en este momento?

Espero que esto tenga sentido ya que soy bastante nuevo en async / await / tareas.

Muchas gracias de antemano.