我正在使用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
UI上有一个主页按钮,该按钮根本没有回答问题,但将用户带回了应用程序的开始。在这种情况下,TrySetResult
永远不会被调用。我已经检查了线程是否累积,并且没有。如果以下的代码从未被调用,我完全可以,但是我想确保以后不会咬我。
您不应该这样做。该框架假定任务将完成。
正如@slaks所指出的,如果您不这样说,则会导致内存泄漏。