나는 재미를 System.Threading.Tasks
와 함께 일하고있다. 그러나 내가 보는 많은 코드 샘플은 다음과 유사합니다.작업을 처분해야합니까?
Dim lcTask = Task.Factory.StartNew(Sub() DoSomeWork())
Dim lcTaskLong = Task.Factory.StartNew(Sub() DoSomeWork(), TaskCreationOptions.LongRunning)
Task.WaitAll(lcTask, lcTaskLong)
이는 샘플의 범위입니다.
작업은 IDisposable
을 구현하므로 분명히 처리해야합니다.하지만 그냥 "불 또는 잊어 버리려는 경우"어떻게해야합니까?
처리하지 않으면 스레드/핸들/메모리/카르마가 누출됩니까? "잘못된"작업을 사용하고 있습니까? (대리인 만 사용하고 작업을 남겨 두어야합니까?)
ContinueWith()
으로 처분 할 수 있습니까? (즉, 러시아 룰렛처럼 보인다.)
및 \t \t [CodeAnalysis.SuppressMessage ("Microsoft.Reliability", "CA2000", Justification = "http://stackoverflow.com/questions/5985973/do-i-need-to-dispose-of -a-task ")] – GarethOwen
당신이 연결하는 Stephen Toub 스레드를 보면,"작업 대기가 제대로 작동 할 수 있도록 대기 핸들이 필요합니다. 작업이 계속되는 경우 작업의 Dispose 메서드는 실제 효과가 없습니다 ... "그러나 Toub에 따르면 Task.Dispose는 잠재적으로 이벤트 핸들을 래핑하는 Task로 인해 존재합니다. 지속을 사용하면 이벤트 핸들이 할당되지 않고 Dispose 값이 크게 감소합니다. " 즉 위에서 암시 한 것과 반대입니다. –