2014-02-05 20 views
1

我正在使用TaskCompletionSource來創建一種異步用戶界面事務。如果我從不響應使用TaskCompletionSource的等待,該怎麼辦?

var tcs = new TaskCompletionSource<IAutoQuestionAnswer>(); 

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

_navigationService.Navigate(ViewNames.AutoQuestionView, a_question); 

return tcs.Task; 

如果AnswerSelected永遠不會提高,TrySetResult從未呼籲TCS,這會帶來什麼問題?我在AutoQuestionView用戶界面上有一個主頁按鈕,它根本不回答問題,但將用戶帶回到應用程序的開始處。在這種情況下,TrySetResult將永遠不會被調用。我已經檢查過線程是否建立起來,而不是。如果後面的代碼完全沒有被調用,我完全沒問題,但我想確保它不會在以後被我咬。

+3

然後任何等待任務的人將永遠不會恢復。這可能會導致內存泄漏。 – SLaks

回答

3

You should not do this.該框架假定任務將完成。

@SLaks指出,如果你不這樣做,那麼你會造成內存泄漏。

相關問題