如何取消使用等待的Windows Phone任务

时间:2013-09-15 04:58:50

标签: c# windows-phone-7 task

我有这个代码启动一个Task线程,它调用一个方法来读取StreamSocket中的数据。我也带了一个取消令牌。

await Task.Factory.StartNew(ProcessMessage, CancelToken);

但在我称这种方法之后。

CancelToken.Cancel();

当我在StreamSocket中获取新数据时,我的应用仍会运行ProcessMessage方法。哪个不应该发生。它认为它是因为我使用等待它。

如何在取消令牌时停止此任务?

1 个答案:

答案 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找到有关实施取消的指南。