TAP示例中的无限while循环

时间:2016-08-15 19:56:12

标签: c# asynchronous while-loop task-parallel-library

在研究TAP(基于任务的异步模式)时,我在此MSDN webpage上找到了此示例代码段。

private static AsyncProducerConsumerCollection<int> m_data = …;
…
private static async  Task ConsumerAsync()
{
    while(true)
    {
        int nextItem = await m_data.Take();
        ProcessNextItem(nextItem);
    }
}
…
private static void Produce(int data)
{
    m_data.Add(data);
}

我认为这没有道理,因为这实际上是一个无限循环的无限循环。我错过了什么吗?如果是这样,请理解它的工作原理。

编辑:我得到了示例的范围,该函数正在尝试处理项目,直到它用完为止。我也得到TaskTask<void>相同,即此函数不必返回任何内容。但事实上它有一个while(true)困扰我,因为这意味着这个功能永远运行。这是否意味着终止应用程序的调用函数是什么?这部分的细节对我来说并不是那么清楚。

1 个答案:

答案 0 :(得分:1)

如果你想以TAP的方式打破循环,可以使用CancellationTokenSource并调用Cancel来打破循环。 您可以在发布的原始link和我在此处添加的CancellationTokenSource的MSDN页面上详细了解相关内容。