我有这个代码启动一个Task线程,它调用一个方法来读取StreamSocket中的数据。我也带了一个取消令牌。
await Task.Factory.StartNew(ProcessMessage, CancelToken);
但在我称这种方法之后。
CancelToken.Cancel();
当我在StreamSocket中获取新数据时,我的应用仍会运行ProcessMessage方法。哪个不应该发生。它认为它是因为我使用等待它。
如何在取消令牌时停止此任务?
答案 0 :(得分:0)
当您发出CancellationToken.Cancel()
时,取消令牌的每个副本上的IsCancellationRequested
属性都设置为true。接收通知的对象可以以适当的方式响应。典型的模式是在你的循环中调用token.ThrowIfCancellationRequested()
。
因此,在ProcessMessage
例程中,您需要类似
while (processing)
{
// carry on your processing...
// Poll on this property if you have to do other cleanup before throwing.
if (token.IsCancellationRequested)
{
// Clean up here, then...
token.ThrowIfCancellationRequested();
}
}
您可以通过等待in the MSDN documentation找到有关实施取消的指南。