Taskfortsetzung parallele Ausführung mit async / await

Im Rahmen von aKonsole Anwendung unter Verwendung vonasync / erwarten Konstrukte würde ich gerne wissen, ob es möglich ist, dass "Fortsetzungen" auf mehreren Threads auf verschiedenen CPUs parallel laufen.

Ich denke, dass dies der Fall ist, da Fortsetzungen auf dem Standard-Taskplaner (kein SynchronizationContext in der Konsolen-App) veröffentlicht werden, der der Thread-Pool ist.

Ich weiß, dass async / await-Konstrukt keinen zusätzlichen Thread erstellt. Es sollte immer noch mindestens einen Thread pro CPU geben, der vom Thread-Pool erstellt wird. Wenn also Fortsetzungen im Thread-Pool veröffentlicht werden, können Task-Fortsetzungen parallel auf verschiedenen CPUs geplant werden. Das habe ich mir gedacht, aber aus irgendeinem Grund war gestern wirklich verwirrt und ich bin mir nicht mehr so ​​sicher.

Hier ist ein einfacher Code:

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 erstellt keinen Thread an sich und wir wollen zum Beispiel sagen, dass er nur einige Anforderungen asynchron sendet, wobei er sich auf den E / A-Abschlussport verlässt, um überhaupt keinen Thread zu blockieren.

Nun, wenn ich anrufeStart Methode, die 1000 asynchrone Operationen ausführt. Kann der Fortsetzungscode der asynchronen Methode (nach dem Warten) auf verschiedenen CPU-Threads parallel ausgeführt werden? Muss ich mich in diesem Fall um die Thread-Synchronisation kümmern und den Zugriff auf das Feld "i" synchronisieren?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage