To clarify, having advance return the result means the design can be used to read from an external queue on multiple threads. C#'s IEnumerable can't do this, because the interface assumes only one consumer.
(Edit: I should point out C# is not the only platform that gets this wrong. C++/STL has the same design.)
(Edit: I should point out C# is not the only platform that gets this wrong. C++/STL has the same design.)