2012-07-09 5 views
4

간단한 질문 인 경우 용서해주세요. 답변을 검색 할 수있는 일반적인 방법으로 문구를 사용할 수 없었습니다. 콜백 메소드가 실행되면메인 스레드의 작업 계속

var task = Task.Factory.StartNew(() => Whatever()); 
task.ContinueWith(Callback, TaskScheduler.FromCurrentSynchronizationContext()) 

이 정확히 어떻게가 결정됩니다

이 코드를 생각해?

주 스레드가 현재 수행중인 작업을 마칠 때까지 기다리거나 비동기 호출이 완료된 직후에 주 스레드가 호출 될 것입니까? 그리고이 콜백은 주 스레드가 이전에했던 일로 돌아 오기 전에 완전히 실행됩니까?

답변

8

주 스레드가 현재 수행중인 작업이 완료 될 때까지 대기하거나, 비동기 호출이 완료된 직후에 호출 될 것입니까?

비동기 호출이 완료되면 으로 지정됩니다. 그 스케줄링의 효과는 스케줄러에 달려 있지만 (보통) WPF 또는 Windows Forms 메시지 루프의 경우에는 Control.BeginInvoke 또는 Dispatcher.BeginInvoke을 호출하는 것과 비슷한 방식으로 스케줄 될 것으로 예상됩니다. 즉, "주"스레드가이 전에 예약 된 나머지 작업을 마쳤을 때.

메인 스레드가 마술처럼 그 일을 멈추고 연속을 실행하지 않을 것이라고 기대합니다. 그러나 일 수 있으며 대기열에서 우선 순위가 높은 작업을 계속 수행 할 수 있습니다.

+0

대단히 감사합니다! – user981225

관련 문제