Execução paralela de continuação de tarefas com async / await

No contexto de umaconsole aplicação fazendo uso deasync / await Construções, gostaria de saber se é possível para "continuations" para executar em paralelo em vários threads em CPUs diferentes.

Eu acho que este é o caso, como continuações são postadas no agendador de tarefas padrão (sem SynchronizationContext no aplicativo de console), que é o pool de segmentos.

Eu sei que a construção async / await não constrói nenhum thread adicional. Ainda deve haver pelo menos um thread construído por CPU pelo conjunto de threads e, portanto, se continuações forem postadas no pool de threads, ele poderia agendar continuações de tarefas paralelamente em CPUs diferentes ... foi o que eu pensei, mas por alguma razão eu Fiquei muito confuso ontem sobre isso e eu não tenho mais tanta certeza.

Aqui está um código simples:

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 não cria nenhum encadeamento em si mesmo, e digamos, por causa do exemplo, que ele apenas envia algum pedido de forma assíncrona, confiando na porta de conclusão de E / S, de modo a não bloquear nenhum encadeamento.

Agora, se eu ligarComeçar método que emitirá 1000 operações assíncronas, é possível que o código de continuação do método assíncrono (após o await) seja executado em paralelo em diferentes encadeamentos de CPU? ou seja, eu preciso cuidar da sincronização de threads neste caso e sincronizar o acesso ao campo "i"?

questionAnswers(2)

yourAnswerToTheQuestion