嗨,我正忙于 Task.Factory.StartNew。就像我想我明白了,有人建议我编写以下代码;
bool exitLoop = false;
while (!exitLoop)
{
exitLoop = true;
var messages = Queue.GetMessages(20);
foreach (var message in messages)
{
exitLoop = false;
Task.Factory.StartNew(() =>
{
DeliverMessage(message);
});
}
}
理论上,这将耗尽一个队列,一次 20 条消息,尝试为队列中的每条消息创建一个任务。因此,如果我们在队列中有 1000 条消息,那么瞬间我们就会有 25 个任务,它会吃掉所有的消息。我以前认为我理解这一点,我认为 StartNew 一旦条目用完就会阻止 - 在过去应该是 ~ 25。但鉴于这是 .net 4.5,我现在的印象是上限一个游泳池现在相当高。令我困惑的是,我会假设新任务将淹没池并开始阻塞,即瞬间我现在有 1000 个任务在运行。因此,如果池限制现在几乎不是限制,为什么我看不到 1000 个任务?
[编辑] 好的,所以我看到的是 1000 个任务排队运行,而不是正在运行。那么如何确定正在运行/可运行的任务的数量呢?