2014-11-20 3 views
3

Thread.Abort에서 멀리 떨어져 있어야하는 곳을 여러 곳에서 읽었습니다. 그리고 이것이 사실이라는 어려운 방법을 배웠습니다. (Mono에 플랫폼 의존적 인 동작이있는 것처럼 보입니다) :))Thread.Abort없이 스레드를 종료하는 좋은 방법

외부에서 스레드를 종료하는 좋은 방법은 무엇입니까?

는 나는이 같은 코드를 추가 할 수 있습니다 이해 :

if (terminateRequested) return; 

이상의 스레드 코드가 여러 C#을 파일에 걸쳐있다

if (terminateRequested) throw new MyTerminateThreadException(); 

하지만 실제 경우

그것은 빠르게된다 성가신 및 중복 패턴.

스레드가 잠자기 상태이거나 서버 연결, 뮤텍스 또는 실행 코드가 내 것이 아니라면 어떻게됩니까? 그것들을 어떻게 처리합니까?

+1

http://stackoverflow.com/questions/3632149/question-about-terminating-a-thread-cleanly-in-net/3632642#3632642 - 도움이 될 것 같습니까? – Unflux

+1

짧은 공간에서이 질문에 올바르게 답하기에는 너무 많은 시나리오가 있습니다. 실제로는 각 시나리오에 따라 다릅니다. 즉,'Thread.Abort()'를 사용하지 않는다면 (쓰레드를 인터럽트하는 것은 끔찍한 방법이다.) 적극적으로 실행되는 쓰레드가 중단되기를 원한다면 어딘가에서 어떤 상태를 체크하는 것이 좋다. –

+1

Mono는'Task' 클래스를 사용할 수 있습니까? 그렇다면'CancellationToken'을 사용하여 스레드를 인터럽트 할 수 있습니다. – techvice

답변

0

모노는 Taskclass available입니다. CancellationToken을 사용하여 살펴볼 것을 권합니다. 스레드를 실행하고 취소하는 더 좋은 방법은이 Task Cancellation 페이지를 확인하십시오.

관련 문제