2010-03-03 5 views
1

는 Thread.Abort은 수면 시간 기간이 만료 될 때까지 말, Thread.sleep를 (TimeSpan.FromDays이 (40)) 또는 그것이 대기, 사용 (자고 스레드를 중단 할 수Thread.Sleep 동안 ThreadAbortException을 발생시킬 수 있습니까? ?

(비고 : FromDays를 (40)은 물론 농담입니다. Thread.Abort가 스레드를 중지하는 권장 방법이 아니라는 것을 알고 있습니다. 지금 리팩토링하지 않으려는 레거시 코드로 작업하고 있습니다.)

답변

4

코드는 1000 단어의 가치가 있습니다 :

public static void Main(string[] args) 
{ 
    var sleepy = new Thread(() => Thread.Sleep(20000)); 

    sleepy.Start(); 
    Thread.Sleep(100); 
    sleepy.Abort(); 
    sleepy.Join(); 
} 

수면 시간이 모두 소모되기 전에 프로그램이 종료됩니다.

+1

경험해 보니 천 달러의 가치가 있기 때문에 시도해 보겠습니다 .- 광고가 성공하면 성공을 거두 겠습니다. – user192472

+0

그러나 'Sleep (TimeSpan.FromDays (40))'가 어떻게됩니까? 그것이 프로그램이 끝나기 전에 멈추는가 아니면 이것은 – zabulus

+0

에 대한 질문입니다. 실제로 광고 된대로 작동합니다. – user192472

-2

즉, 스레드 참조를 어딘가에 저장 한 다음 잠자는 스레드가 아닌 다른 스레드에서 .Abort을 호출해야합니다.

+0

물론. 그것이 작동하는 방법입니다. 하지만 다른 스레드가 슬립 타임 스팬이 끝나기 전에 슬리핑 스레드를 인터럽트 할 수 있습니까? – user192472

+0

물론 가능합니다. 그건 의도적으로입니다. – Kerido

+1

'Thread.CurrentThread.Abort()'를 호출하는 것을 막을 수있는 것은 아무것도 없다. –