2014-02-05 18 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指出,如果你不这样做,那么你会造成内存泄漏。

相关问题