我有一个消费者/生产者设置,共享一个BlockingCollection。
public void StartConsumer(CancellationToken cancellationToken)
{
Task.Factory.StartNew(async () =>
{
foreach (var value in collection.GetConsumingEnumerable(cancellationToken))
{
var rowsAffected = await GetFooAsync(value.Id);
}
}, cancellationToken, TaskCreationOptions.LongRunning, TaskScheduler.Current)
.ContinueWith(task => HandleConsumerStopped(task, cancellationToken), cancellationToken);
}
从第一个线程返回到“ContinueWith”的任务始终具有任务的结果。 该任务的结果为“WaitingForActivation”,
所以,我的问题是,为什么它会跳出foreach循环? 它不应该一直阻塞直到cancellationToken被取消吗?
内部的GetFooAsync是否导致某些行为从Foreach中断?