如何取消使用 await 的 Windows Phone 任务
本文关键字:await Windows Phone 任务 何取消 取消 | 更新日期: 2023-09-27 18:31:30
我有这段代码来启动一个任务线程,该线程调用一个方法,以便在 StreamSocket 中的数据可用时读取数据。Iy 还拿了一个取消令牌。
await Task.Factory.StartNew(ProcessMessage, CancelToken);
但是在我调用此方法之后。
CancelToken.Cancel();
当我在 StreamSocket 中获取新数据时,我的应用仍然运行 ProcessMessage 方法。这不应该发生。 它认为这是因为我在上面使用了等待。
如何让此任务在令牌被取消时停止?
发出 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();
}
}
您可以在 MSDN 文档中找到有关使用 await 实现取消的指南。