[C#] using 문 내부에서 yield return을 하면?

Disposable객체를 Coroutine 내부에서 사용할 경우 과연 어느 타이밍에 파괴될지 궁금해서 한번 간단하게 테스트 코드를 작성해 봤습니다.

설마... yield return 할 때 마다 파괴되고 다시 생기진 않겠지...

테스트 하는 김에 using static 도 한번 사용해 봅니다.

using System;
using System.Collections;
using static System.Console;

namespace YieldReturnInUsingStatement
{
    class DisposeTest : IDisposable
    {
        public DisposeTest() {
            WriteLine("Construct");
        }
        public void Dispose() {
            WriteLine("Dispose");
        }
    }
    class Test
    {
        public IEnumerator Run() {
            using (new DisposeTest()) {
                for (int i = 0; i < 10; ++i) {
                    WriteLine(i);
                    yield return null;
                }
            }
        }

        public Test() {
            var e = Run();
            while (e.MoveNext()) {

            }
        }
    }
    class Program
    {
        static void Main(string[] args) {
            var test = new Test();
        }
    }
}

결과는 다행히 using 블록을 완전히 빠져나간 타이밍에 Dispose 되었습니다.

Construct
0
1
2
3
4
5
6
7
8
9
Dispose

 

using static은 참 편하네요. 전역 함수처럼 만들어 줍니다.

많이 쓰면 몸에 나쁠것만 같은 느낌.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다