在研究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);
}
我认为这没有道理,因为这实际上是一个无限循环的无限循环。我错过了什么吗?如果是这样,请理解它的工作原理。
编辑:我得到了示例的范围,该函数正在尝试处理项目,直到它用完为止。我也得到Task
与Task<void>
相同,即此函数不必返回任何内容。但事实上它有一个while(true)
困扰我,因为这意味着这个功能永远运行。这是否意味着终止应用程序的调用函数是什么?这部分的细节对我来说并不是那么清楚。
答案 0 :(得分:1)
如果你想以TAP的方式打破循环,可以使用CancellationTokenSource并调用Cancel
来打破循环。
您可以在发布的原始link和我在此处添加的CancellationTokenSource
的MSDN页面上详细了解相关内容。