Załóżmy, że mamwyliczenia „połów”, że nie daj się „gotowe” przez dzwoniącego - Co się dzieje
IEnumerable<string> Foo()
{
try
{
/// open a network connection, start reading packets
while(moredata)
{
yield return packet;
}
}
finally
{
// close connection
}
}
(lub być może zrobiłem „dzięki” - to samo). Co się stanie, jeśli mój rozmówca poda
var packet = Foo().First();
Zostałem właśnie z nieszczelnym połączeniem. Kiedy w końcu się inwokuje? Czy też słuszne zawsze dzieją się magiczne
edit z odpowiedzią i myśli
My próbki i inne „normalne” (foreach, ..) wywołanie wzorców będzie działać dobrze, bo wyrzucać IEnumerable (właściwie IEnumerator zwrócony przez GetEnumerator). Muszę więc mieć gdzieś dzwoniącego, który robi coś fajnego (jawnie pobierającego moduł wyliczający i nie wyrzucającego go itp.). Będę je zastrzelił
zły kod
znalazłem rozmówcę robi
IEnumerator<T> enumerator = foo().GetEnumerator();
zmieniona na
using(IEnumerator<T> enumerator = foo().GetEnumerator())
Moje najlepsze przypuszczenie: zwraca tylko pierwszy 'pakiet' (?) –
@MaciejLos Który nie odpowiada na pytanie, które zadał. – Servy
@Servy, wiem. To był powód, dla którego napisałem komentarz. Jak widać, dodałem '?' Na końcu instrukcji, bo nie jestem pewien. Dzięki za komentarz. –