BlockingCollection(Of T) 的目的是什么

2024-01-29

我试图在 .NET 4 上新的并行堆栈的上下文中理解 BlockingCollection 的用途。

The MSDN http://msdn.microsoft.com/en-us/library/dd267312(VS.100).aspx文档说:

BlockingCollection 用作 IProducerConsumerCollection 实例的包装器,允许从集合中进行删除尝试,直到可以删除数据为止。类似地,可以创建 BlockingCollection 以强制 IProducerConsumerCollection 中允许的数据元素数量的上限;然后,对集合的添加尝试可能会被阻止,直到有空间可用于存储添加的项目。

然而,当我查看某些 IProducerConsumerCollection(例如 ConcurrentQueue)的实现时,我发现它们提供了无锁、线程安全的实现。那么为什么需要BlockingCollection提供的锁机制呢? MSDN中的所有示例都显示通过BlockingCollection包装器使用这些集合,直接使用这些集合有什么麻烦?使用 BlockingCollection 会产生什么好处?


如果您无事可做(或者更确切地说:在执行操作之前无法继续),则阻塞直到可以执行操作是很方便的。

如果您有一个非阻塞队列要从中读取数据,并且当前没有数据,则必须定期轮询它,或者等待某个信号量,直到有数据为止。如果队列阻塞,这已经自动完成。

同样,如果您尝试添加到已满的非阻塞队列中,操作就会失败,然后您必须弄清楚该怎么做。阻塞队列只会等待,直到有空间。

如果您有一些聪明的做法而不是等待(例如检查另一个队列的数据,或引发 QueueTooFullException),那么您需要非阻塞队列,但通常情况并非如此。

通常,有一种方法可以指定阻塞队列的超时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BlockingCollection(Of T) 的目的是什么 的相关文章

  • 从 DataGridColumn 中绑定到 DataContext 属性

    财产Foo在我的DataContext ViewModel Visibility Foo 但我不知道如何访问Foo里面一个Column 在这种情况下 我认为它可能正在寻找Foo在任何绑定到的对象中DataGrid ItemsSource
  • CLR 分析器:使用 DefineAssemblyRef 时出现问题

    我想编写一个 CLR 分析器来挂钩我们的应用程序函数GetILFunctionBody SetILFunctionBody 我想使用 DefineAssemblyRef 导入我们的 c dll 用于 IL 代码 在此代码中 DefineAs
  • 如何制作.Net或JVM语言?

    我看到了 NET 和 JVM 的所有这些新语言 一个人如何开始制作一个 我找不到关于 JVM 或 MSIL 规范的任何好的文档 Edit 我已经知道如何解析 我更感兴趣的是如何有这么多人基于这些平台创建新语言 你有点幸运 为 NET 开发的
  • 为什么在这里使用BeginInvoke?

    我正在研究其他人的代码 并且对与多线程有关的任何事情没有太多经验 我遇到了这行代码 BeginInvoke MethodInvoker delegate btnCalibrate PerformClick 我想知道为什么要这样做 因为这样就
  • 使用 .NET WebClient 模拟 XmlHttpRequest

    据我所知XmlHttpRequest我只需使用以下命令即可下载和上传数据send方法 但WebClient有很多方法 我不想要一个的所有功能WebClient 我只想创建一个模拟的对象XmlHttpRequest 但它没有 XSS 限制 我
  • 并行何时会提高性能

    我试图理解何时使用parallel会提高性能 我用一个简单的代码对其进行了测试 该代码运行了超过 100 000 个项目List
  • MEF 或 MEF2 是否已融入 .NET Framework 中?

    我正在尝试了解 MEF 并且看到对 MEF 和 MEF 2 的引用 This site http www palmmedia de blog 2011 8 30 ioc container benchmark performance com
  • 异步回调到BackgroundWorker

    我想使用 NET FTP 库 http netftp codeplex com http netftp codeplex com 该库提供 BeginOpenRead string AsyncCallback object 使用异步编程模型
  • Node.js 和 .net 之间的命名管道通信

    我正在研究 net v4 5 2 和 Javascript node js v8 9 0 应用程序之间的进程间通信 我想为此使用 Windows 命名管道 并且仅限命名管道 对于 Javascript 应用程序 我使用的是命名管道包 v0
  • GridView必须添加到表单标签中才能渲染

    TextWriter tr new StringWriter HtmlTextWriter writer new HtmlTextWriter tr HtmlForm form new HtmlForm form Controls Add
  • 当文件已存在时无法创建该文件

    我正在使用 Winforms 并且尝试将文件从一个位置复制到另一个位置 如果同名文件已经存在 我想覆盖它 但我收到类似 当文件已存在时无法创建文件 的错误 我想覆盖该文件 我应该怎么办 我试过File copy代替File move 但我遇
  • MVVM ViewModel 很多属性

    我是 MVVM 新手 正在开发一个应用程序 我有一个包含很多属性的表单视图 大约 50 个 我不能将它们分离到用户控件中 因为这会破坏 mvvm 原则 我无法将它们分成模型 因为它们包含逻辑 属性更改 错误更改这些都不是 poco 类 并且
  • 使用 LINQ 迭代类属性

    有一个 ParsedTemplate 类 它有超过 300 个属性 类型为 Details 和 BlockDetails parsedTemplate 对象将由函数填充 填充这个对象后 我需要一个 LINQ 或其他方式 来查找是否有任何属性
  • 检测 404 而不捕获异常

    简单功能 检查网络服务器是否返回非 200 HTTP 状态 Private Function RemoteFileOk ByVal Url As String As Boolean Dim req As HttpWebRequest Try
  • 执行鼠标单击而不移动光标

    除了移动光标之外 我找不到任何解决方案Cursor类 点击mouse event然后将光标移动到原来的位置 我正在玩SendInput现在可以运行 但仍然没有机会找到好的解决方案 有什么建议吗 您应该使用 Win32 API 使用 user
  • Task.Factory.StartNew 或 Parallel.ForEach 对于许多长时间运行的任务? [复制]

    这个问题在这里已经有答案了 可能的重复 Parallel ForEach 与 Task Factory StartNew https stackoverflow com questions 5009181 parallel foreach
  • 如何获取 ASP.NET MVC 中当前的虚拟路径?

    如何从 ASP NET MVC 视图中获取当前路径 URL 如果没有办法将其获取到视图中 那么如何将其获取到控制器中以便将其传递到视图呢 EDIT 我不需要 url 的协议和主机部分 这将为您返回视图中的 url
  • 如何解决文件被另一个进程使用的问题?

    我一直在 VS NET 2010 中调试 没有任何问题 但现在无法建造 我收到错误 Unable to copy file filename to bin Debug filename The process cannot access t
  • 检测笔记本电脑盖子的关闭和打开

    是否可以检测笔记本电脑的盖子何时打开或关闭 从我读到的内容来看 这是不可能的 但 SO 之前已经帮助我完成了不可能的任务 我发现唯一可能朝着正确方向的事情是关于报告电源按钮所需的 IOCTL 的 MSDN 博客文章 https learn
  • 如何创建实体集或模型而不在数据库中创建相应的表 - 实体框架

    我的 sqlserver 数据库中有一个存储过程 它返回多个结果集 我正在使用 msdn 中的以下链接从实体框架中的 SP 读取多个结果集 https msdn microsoft com en us library jj691402 v

随机推荐

  • 命名约定(单数或复数名称类)

    我有一个class对商店进行建模 所以它具有以下属性 name 描述 address phone etc 我应该命名它吗ShopInfo or 商店信息 任何链接到命名约定 如果你有一个类的对象 它只是信息for one店铺 该对象描述了一
  • iOS Swift:从 CNContactProperty 中获取用户选择的电话号码作为字符串[重复]

    这个问题在这里已经有答案了 正如标题所示 在我使用 swift 的 iOS 应用程序中 我有一个 CNContactProperty 对象 我想从中提取电话号码作为字符串 用户从中选择联系人后 CNContact 属性通过委托协议函数从标准
  • 我该如何清理这个 lambda?

    我有一个在多个 LINQ 查询中多次使用的表达式 因此我将其分离到它自己的返回该表达式的方法中 该函数的 lambda 部分看起来有点混乱 有人想尝试重构它并使其更具可读性和 或更小吗 private Expression
  • 使用不同的替换顺序替换字符串中与单个模式匹配的多个位置

    Using stringr包中 很容易以矢量化方式执行正则表达式替换 问题 我该如何执行以下操作 替换中的每个单词 hello world your make world hello pos 不同的替代品 例如数量不断增加 1 2 3 4
  • Eclipse RCP 4 与 NetBeans Platform 8 对比:选择什么?

    我即将为我的公司启动一个相当大的应用程序 由于它必须是跨平台的 我们指向 Java 本来会喜欢 C 但探索了 Xamarin 生态系统 而 Mac 部分似乎远远落后于休息包 现在 我正在将 Netbeans 8 和 Eclipse 4 作为
  • 如何通过蓝牙 android 发送/接收字符串到另一部 android 手机

    在我的 Android 应用程序中 我想通过蓝牙将字符串从一台设备发送到另一台设备 可用设备显示在列表视图中 我想在不配对的情况下发送字符串 我无法在设备之间建立连接 任何人都可以帮助我建立连接并发送字符串 我有很多示例 但无法弄清楚文件传
  • 如何在 emacs 艺术家模式下在矩形内写入文本?

    我正在 emacs 中学习艺术家模式 发现它非常有趣 我想创建形状并在其中写入文本 就像我们可以使用其他可以绘制形状的软件一样 但是 当我在矩形内键入一些字符时 形状会变形 垂直线会移动一些字符 Please see attached im
  • zend smtp 邮件在 100 多封邮件后崩溃

    在发送新闻通讯类的邮件时 我遇到了这个奇怪的问题 在 for 循环中 我循环访问数据库中的所有用户 并尝试向他们发送一封包含一些基本信息的 HTML 邮件 现在的问题是 前 200 封左右的邮件运行良好 但随后脚本崩溃并给出以下错误 War
  • 使用 NSDate() 快速创建未来日期

    我收到错误 调用中缺少参数 编码器 的参数 以下代码 var components NSDateComponents components setValue 1 forComponent NSCalendarUnit CalendarUni
  • Pygame 事件队列

    我想知道是否有一种使用方法poll or get 而不从队列中删除事件 在我的游戏中 我检查不同位置的输入 不仅在主循环中 有时我需要在不同位置检查相同的事件 但是当我检查它时 它会将其从队列中删除 我尝试使用peek 但问题是我无法获得与
  • Zend ACL 动态断言

    我想限制我的用户只能编辑 删除他们添加的评论 我在 youtube 上找到了一个名为 intergral30 的人的示例 并按照他的指示进行操作 现在我的管理员帐户可以编辑 删除所有内容 但我的用户无权访问他自己的评论 这是代码 资源 cl
  • .h 文件有什么意义?

    我知道 h 文件应该有 类声明 函数原型 和外部变量 对于全局变量 但让它成为一个有什么意义吗 h文件 我尝试重命名我的 h文件到一个 c文件 它仍然有效 We can name our file to be anything but we
  • 为什么我不需要引用“System.dll”来使用“System”命名空间?

    我正在处理指定 不要使用任何外部库 的作业 所以我创建了一个 C 应用程序 我做的第一件事就是默认删除所有 dll 的引用 包括 System dll 但是 我仍然可以将其添加到我的代码中 using System using System
  • PostgreSQL全文搜索和保留字,保留一些单词

    我正在使用 Postgresql 和英语字典进行完整的测试搜索 当我想接收带有一些英语单词的记录时 我得到了真实的结果 And so SELECT id FROM table1 WHERE ts vector1 to tsquery it
  • BlockingCollection(Of T) 的目的是什么

    我试图在 NET 4 上新的并行堆栈的上下文中理解 BlockingCollection 的用途 The MSDN http msdn microsoft com en us library dd267312 VS 100 aspx文档说