Continuación de la tarea Ejecución paralela con async / await

En el contexto de unconsola aplicación haciendo uso deasíncrono / espera construcciones, me gustaría saber si es posible que las "continuaciones" se ejecuten en paralelo en varios subprocesos en diferentes CPU.

Creo que este es el caso, ya que las continuaciones se publican en el programador de tareas predeterminado (sin SynchronizationContext en la aplicación de consola), que es el grupo de subprocesos.

Sé que la construcción asíncrona / await no construye ningún hilo adicional. Aún así, debería haber al menos un subproceso construido por CPU por el conjunto de subprocesos, y por lo tanto, si se publican continuaciones en el conjunto de subprocesos, podría programar continuaciones de tareas en paralelo en diferentes CPU ... eso es lo que pensé, pero por alguna razón Ayer me confundí mucho con respecto a esto y ya no estoy tan seguro.

Aquí hay un código simple:

public class AsyncTest
{
  int i;

  public async Task DoOpAsync()
  {
    await SomeOperationAsync();

    // Does the following code continuation can run 
    // in parrallel ?
    i++;       

    // some other continuation code ....
  }

  public void Start()
  {
    for (int i=0; i<1000; i++)
    { var _ = DoOpAsync(); } // dummy variable to bypass warning
  }
}

SomeOperationAsync no crea ningún subproceso en sí mismo, y digamos por el ejemplo de que simplemente envía alguna solicitud de forma asíncrona basándose en el puerto de finalización de E / S para no bloquear ningún subproceso.

Ahora si llamocomienzo método que emitirá 1000 operaciones asíncronas, ¿es posible que el código de continuación del método asíncrono (después de la espera) se ejecute en paralelo en diferentes subprocesos de la CPU? es decir, ¿necesito encargarme de la sincronización de subprocesos en este caso y sincronizar el acceso al campo "i"?

Respuestas a la pregunta(2)

Su respuesta a la pregunta