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은 참 편하네요. 전역 함수처럼 만들어 줍니다.
많이 쓰면 몸에 나쁠것만 같은 느낌.