Por que o Enumerator.MoveNext não está funcionando conforme o esperado quando usado com o uso e o async-waitit?

Eu gostaria de enumerar através de umList<int> e chame um método assíncrono.

Se eu fizer isso desta maneira:

public async Task NotWorking() {
  var list = new List<int> {1, 2, 3};

  using (var enumerator = list.GetEnumerator()) {
    Trace.WriteLine(enumerator.MoveNext());
    Trace.WriteLine(enumerator.Current);

    await Task.Delay(100);
  }
}

o resultado é:

True
0

mas espero que seja:

True
1

Se eu remover ousing ou oawait Task.Delay(100):

public void Working1() {
  var list = new List<int> {1, 2, 3};

  using (var enumerator = list.GetEnumerator()) {
    Trace.WriteLine(enumerator.MoveNext());
    Trace.WriteLine(enumerator.Current);
  }
}

public async Task Working2() {
  var list = new List<int> {1, 2, 3};

  var enumerator = list.GetEnumerator();
  Trace.WriteLine(enumerator.MoveNext());
  Trace.WriteLine(enumerator.Current);

  await Task.Delay(100);
}

a saída é como o esperado:

True
1

Alguém pode me explicar esse comportamento?

questionAnswers(2)

yourAnswerToTheQuestion