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