为什么以及在BlockingCollection上的foreach循环如何无限运行?

狐狸

我正在开发一个简单的文件记录器,遇到线程安全问题,并且正在研究其他人的工作方式。我遇到了使用BlockingCollection作为队列和foreach循环来处理该队列的方法:

var queue = new BlockingCollection<string>(1024);
var t = Task.Factory.StartNew(() => {
                                        foreach (var message in queue.GetConsumingEnumerable()) {
                                            WriteMessageToFile(message);
                                        }
                                    }, TaskCreationOptions.LongRunning);

Dim queue = New BlockingCollection(Of String)(1024)
Dim t = Task.Factory.StartNew(Sub()
                                  For Each message In queue.GetConsumingEnumerable()
                                      WriteMessageToFile(message)
                                  Next
                              End Sub, TaskCreationOptions.LongRunning)

这个For Each循环实际上确实是无限运行的。它处理我添加到的数据queue,直到调用.CompleteAddingBlockingCollection。

我不知道为什么这样做会如此,以及如何以及是否是一个好的方法。集合为空时线程做什么,是否检查每个刻度?那不是资源丰富吗?

麦可

它用于SemiphoreSlim等待GetConsumingEnumerableRelease在添加项目时调用(高度简化)。

SemaphoreSlim是不使用Windows内核信号量的Semaphore类的轻量级替代方案

https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.semaphoreslim?view=netcore-3.1

您可以在BlockingCollection此处阅读完整的代码https : //github.com/dotnet/runtime/blob/4f9ae42d861fcb4be2fcd5d3d55d5f227d30e723/src/libraries/System.Collections.Concurrent/src/System/Collections/Concurrent/BlockingCollection.cs

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

For 循环为什么会无限运行?

来自分类Dev

为什么无限循环?

来自分类Dev

无限循环。为什么?

来自分类Dev

为什么该程序无限循环运行?互斥

来自分类Dev

为什么我的程序运行无限循环?蟒蛇

来自分类Dev

为什么该程序无限循环运行?互斥

来自分类Dev

Prolog在一个命令上无限循环,为什么?

来自分类Dev

为什么LiveReload无法在Firefox上运行以及如何解决?

来自分类Dev

bash:为什么source命令实际上运行该功能?以及如何避免呢?

来自分类Dev

为什么这无限循环?

来自分类Dev

循环,什么以及如何使用?(for、while 和 foreach)

来自分类Dev

为什么这while循环是无限循环?

来自分类Dev

为什么这while循环是无限循环?

来自分类Dev

ActionEvent之后的无限时循环或for循环不能正常运行。为什么?

来自分类Dev

为什么此循环无限次运行?for循环中逗号分隔的条件

来自分类Dev

foreach中的无限循环在simplexmlelement上

来自分类Dev

postgreSQL查询似乎在无限循环上运行

来自分类Dev

在Raspberry Pi上启动时以及在后台运行带有无限while循环的bash脚本

来自分类Dev

为什么此代码使用UndecidableInstances进行编译,然后生成运行时无限循环?

来自分类Dev

为什么声纳运行器分析陷入“更新信号量”的无限循环中

来自分类Dev

为什么,虽然while循环在这里无限期地运行?

来自分类Dev

为什么在无限循环中处于睡眠状态的python脚本停止运行?

来自分类Dev

为什么声纳运行器分析陷入“更新信号量”的无限循环中

来自分类Dev

为什么while循环无限运行而不是等待fgets()的更多输入?

来自分类Dev

为什么while循环无限重复?

来自分类Dev

为什么序言进入无限循环?

来自分类Dev

递归函数-为什么不无限循环?

来自分类Dev

为什么这个C程序无限循环?

来自分类Dev

无限循环,不确定为什么

Related 相关文章

  1. 1

    For 循环为什么会无限运行?

  2. 2

    为什么无限循环?

  3. 3

    无限循环。为什么?

  4. 4

    为什么该程序无限循环运行?互斥

  5. 5

    为什么我的程序运行无限循环?蟒蛇

  6. 6

    为什么该程序无限循环运行?互斥

  7. 7

    Prolog在一个命令上无限循环,为什么?

  8. 8

    为什么LiveReload无法在Firefox上运行以及如何解决?

  9. 9

    bash:为什么source命令实际上运行该功能?以及如何避免呢?

  10. 10

    为什么这无限循环?

  11. 11

    循环,什么以及如何使用?(for、while 和 foreach)

  12. 12

    为什么这while循环是无限循环?

  13. 13

    为什么这while循环是无限循环?

  14. 14

    ActionEvent之后的无限时循环或for循环不能正常运行。为什么?

  15. 15

    为什么此循环无限次运行?for循环中逗号分隔的条件

  16. 16

    foreach中的无限循环在simplexmlelement上

  17. 17

    postgreSQL查询似乎在无限循环上运行

  18. 18

    在Raspberry Pi上启动时以及在后台运行带有无限while循环的bash脚本

  19. 19

    为什么此代码使用UndecidableInstances进行编译,然后生成运行时无限循环?

  20. 20

    为什么声纳运行器分析陷入“更新信号量”的无限循环中

  21. 21

    为什么,虽然while循环在这里无限期地运行?

  22. 22

    为什么在无限循环中处于睡眠状态的python脚本停止运行?

  23. 23

    为什么声纳运行器分析陷入“更新信号量”的无限循环中

  24. 24

    为什么while循环无限运行而不是等待fgets()的更多输入?

  25. 25

    为什么while循环无限重复?

  26. 26

    为什么序言进入无限循环?

  27. 27

    递归函数-为什么不无限循环?

  28. 28

    为什么这个C程序无限循环?

  29. 29

    无限循环,不确定为什么

热门标签

归档