yieldが出てくるメソッドは外部イテレータ用にデータコレクションが紐付いた限定的な継続オブジェクト(IEnumerable)を返すようになってる
この継続とはSchemeで言う継続呼び出し(call with current continuation)辺りに精通してないと恐らく真の動きは理解できないと思うけど
yieldキーワードを書くだけで、そのメソッドは見かけ上呼び出し先の処理を中断して、呼び出し元で結果を受け取る事ができ、望めば処理の再開もできるように限定的な状態機械に翻訳される
この一連の仕組みをいちいち自作するのは面倒なのでyieldキーワード等が用意されてる
実際何が起きてるのかはILSpyとかで追わないと判らんと思う