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?