2014-02-05 3 views
1

TaskCompletionSource을 사용하여 일종의 비동기 사용자 인터페이스 트랜잭션을 만듭니다. 이 문제의 원인이됩니다, AnswerSelected하면TaskCompletionSource를 사용하여 응답하지 않는 경우 어떻게해야합니까?

var tcs = new TaskCompletionSource<IAutoQuestionAnswer>(); 

a_question.AnswerSelected += (s, e) => tcs.TrySetResult(e.Item); 

_navigationService.Navigate(ViewNames.AutoQuestionView, a_question); 

return tcs.Task; 

는 발생하지 않습니다 및 TrySetResult는 TCS에 호출되지 않습니다? 질문에 전혀 대답하지 않지만 응용 프로그램의 시작 부분으로 사용자를 되돌아 가게하는 AutoQuestionView UI의 집 버튼이 있습니다. 이 경우 TrySetResult은 호출되지 않습니다. 스레드가 쌓여 있는지 여부는 이미 확인했습니다. 다음 코드가 단순히 호출되지 않는다면 나는 완벽하게 괜찮습니다.하지만 나중에 나에게 물리는 것이 아닐 수 있습니다.

+3

그러면 작업을 기다리는 모든 사람이 다시 시작되지 않습니다. 이로 인해 메모리 누수가 발생할 수 있습니다. – SLaks

답변

3

You should not do this. 프레임 워크는 작업이 완료된다고 가정합니다.

@SLaks가 지적한대로, 그렇지 않으면 메모리 누수가 발생합니다.

관련 문제