0

我有这段代码启动一个任务线程,该线程调用一个方法来读取 StreamSocket 中的数据,只要它可用。Iy 还需要一个取消令牌。

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

但是在我调用这个方法之后。

CancelToken.Cancel();

当我在 StreamSocket 中获取新数据时,我的应用程序仍然运行 ProcessMessage 方法。这不应该发生。它认为它是因为我在它上面使用了等待。

当令牌被取消时,我怎样才能让这个任务停止?

4

1 回答 1

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();
    }
}

您可以在 MSDN 文档中找到关于使用 await 实现取消的指南。

于 2013-09-15T14:42:44.550 回答