2012-03-05 5 views
1


C#에서 작업을 사용하는 것에 대해 this article을보고 있었는데 누군가가 나를 위해 정리할 수 있다면 방황하고 있었습니까?
주 스레드가 작업을 마칠 때까지 기다려야하므로 주 스레드가 멈추지 않기 때문에 작업 생성시 목적을 달성하지 못합니다.
그러나 나는 기다림이 곧바로 호출되지 않을 것이라고 생각하고 있습니다. 그래서 지금은 언제 전화 할 것인가, 아니면 어떻게하면 다른 일을 처리해야 하는지를 알 것입니다. 우리는이 같은 간단한 경우를 가정 :C# 작업 대기 및 폐기

void MyFunction() 
    { 
     Task t = Task.Factory.StartNew(() => { System.Threading.Thread.Sleep(5000); }); 
    } 

당신은 바로 메인 스레드가 여전히 좀로부터 목적을 패배 다른 작업을 수행 할 수있는 전에 5 초 대기) t.Wait를 (호출하는 경우 사용자 시점, 그들은 5 초 동안 아무 것도 할 수 없을 것입니다. 5 초 후에 작업이 완료되었음을 어떻게 알 수 있습니까? 그리고 당신은 t를 처분 할 수 있습니까? 그 올바른 취급 방법은 무엇입니까?
죄송합니다 질문 :(정말 순진 경우 감사합니다 모든 : D

답변

6

당신은 아마 UI 스레드에서이 같은 하나의 작업에 Wait를 호출하지 않을 것이다 - 당신이 요점이 차단되지 말한대로 .. 예를 들어, 실행이 작업을 상상 - UI 스레드 실제로 문제가 될 것 UI 스레드에서 전혀 작업에서 대기

그러나 유용 할 수 있습니다 작업 완료를 기다리는 에 여러 작업을 동기화하고 결합 된 결과를 반환 priceline 및 expedia에 대한 호텔 쿼리와 두 작업을 생성 한 스레드 (예 : ab ackground 스레드) 결과를 기다리고 결과를 결합하여 두 사이트의 사용 가능한 호텔을 가격별로 정렬합니다.

일반적으로 콜백을 실행하거나 이벤트를 발생시켜 쿼리의 최종 결과를 UI 스레드로 다시 보낼 수 있습니다.

+0

Ahhh 사실 : D 감사 : D는 또한 C# GC가 작업을 처리하고 정리하는 것을 의미합니다. .Dispose()를 호출 할 필요가 없습니다. – Heinrich

+0

@Heinrich : 작업에서 이벤트 핸들을 사용하지 않으면 'Dispose'호출에 대해 걱정할 필요가 없습니다. http://stackoverflow.com/questions/3734280/is-it-considered-acceptable을 참조하십시오. -to-not-call-dispose-on-a-tpl-task-object – BrokenGlass

+0

고맙습니다. D – Heinrich