supponiamo di avereenumerazioni 'resa' che non vengono 'finito' dal chiamante - cosa succede
IEnumerable<string> Foo()
{
try
{
/// open a network connection, start reading packets
while(moredata)
{
yield return packet;
}
}
finally
{
// close connection
}
}
(O forse ho fatto un 'usando' - stessa cosa). Cosa succede se il mio chiamante va
var packet = Foo().First();
Sono appena uscito con una connessione trapelata. Quando viene finalmente richiamato? Oppure la cosa giusta sempre accade per magia
di modifica con risposta e pensieri
mio campione e altre 'normale' (foreach, ..) chiamando i modelli funzionano bene, perché dispongono del IEnumerable (in realtà l'IEnumerator restituito da GetEnumerator). Devo quindi avere un chiamante da qualche parte che sta facendo qualcosa di funky (ottenendo esplicitamente un enumeratore e non smaltendolo o qualcosa di simile). Avrò li fucilarono
il codice cattivo
ho trovato un chiamante facendo
IEnumerator<T> enumerator = foo().GetEnumerator();
cambiato in
using(IEnumerator<T> enumerator = foo().GetEnumerator())
La mia ipotesi migliore: restituisce solo il primo 'pacchetto '(?) –
@MaciejLos Questo non risponde alla domanda che ha posto. – Servy
@Servy, lo so. Questa è stata la ragione per cui ho postato un commento. Come puoi vedere, ho aggiunto "?" Alla fine dell'istruzione, perché non ne sono sicuro. Grazie per il tuo commento. –