C# 中线程之间发送消息

2024-07-01

如何在线程之间发送和接收消息?


例如,一种解决方案是共享并发队列(尽管它的名称)并发队列 http://msdn.microsoft.com/en-us/library/dd267265.aspx。这将允许您将一个对象从一个线程入队,并让另一个线程(或其他线程)从队列中出队。由于它是一个通用的解决方案,您可以传递强类型的项目,任何来自string to Action当然,或者您自己的自定义消息类也可以。

这种方法只有一个限制,即类ConcurrentQueue仅从 .NET 4.0 开始可用。如果您需要针对以前版本的 .NET,您需要寻找第三方库。例如,您可以采取来自 mono 的 ConcurrentQueue 源 https://github.com/mono/mono/blob/master/mcs/class/referencesource/mscorlib/system/collections/Concurrent/ConcurrentQueue.cs.

这些队列工作的一般方法是使用链表,并使用旋转进行同步,将它们资源用于乐观并发控制。据我所知,这是可变大小并发队列的最新技术。现在,如果您事先知道消息负载,则可以尝试固定大小的方法或有利于入队和出队而不是增长的解决方案(这将是基于数组的队列)。


全面披露(根据faq https://stackoverflow.com/faq#promotion):我是这些第三方库之一的作者......我的图书馆 https://github.com/theraot/Theraot(nuget可用),它包括一个向后移植ConcurrentQueue对于旧版本的.NET,基于自定义实现。您可以在下面找到底层结构Theraot.Collections.ThreadSafe.SafeQueue,它是一个数组的链表(保存在对象池中),通过这样做,我们不需要复制数组来增长(因为我们只是向列表中添加另一个节点),并且我们不需要需要经常依赖同步机制(因为添加或删除项目不会经常修改列表)。

注意:这个问题曾经链接到 HashBucket,它托管在另一个存储库上,是我解决该问题的旧解决方案。该项目已停止,请使用我上面提到的版本。

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

C# 中线程之间发送消息 的相关文章

随机推荐

  • 向 SQL Server 用户授予执行权限以仅运行特定作业

    我请求创建可由特定 SQL 用户运行的 SQL Server 代理作业 如何在不授予用户执行权限的情况下完成此操作sp start job存储过程意味着他也可以运行所有其他禁止的作业 如果不授予用户对 sp start job 存储过程的执
  • 从数组中删除匹配元素的第一个实例

    假设我有数组 1 2 3 1 2 3 我想删除 比如说 的第一个实例2从数组给出 1 3 1 2 3 最简单的方法是什么 li delete at li index n li length li li length 超出范围 所以 li l
  • 从批处理文件运行 .jar

    我已经创建了一个可执行文件 jar文件 我怎样才能执行 jar使用批处理文件而不提及类路径 在 Windows 上 您可以使用以下命令 start javaw jar JarFile jar 通过这样做 命令提示符窗口不会保持打开状态
  • 如何检查设备是否可以通过有效的 WiFi 连接访问互联网?

    我指的是设备已连接到接入点但由于某种原因被阻止使用此 AP 访问互联网的情况 检查wifi是否启用 WifiManager wfManager WifiManager getSystemService Context WIFI SERVIC
  • list_local_device 张量流未检测到 GPU

    有没有办法检查我安装了GPU的版本Tensorflow nvidia smi 2017 年 12 月 18 日星期一 23 58 01 NVIDIA SMI 384 90 Driver Version 384 90 GPU Name Per
  • 当 HTML 作为输入字符串和 CSS 作为文件传递时,使用 Html2pdf 将 Itext7 HTML 转换为 PDF

    我已经通过 Itext 5 XMLWorker 实现了 HTML 到 PDF 的转换 请找到下面的代码 using var ms new MemoryStream using var document new Document using
  • android - 自动检测未使用的绘图

    问题是 我在开发 Android 应用程序时使用了许多图标和图片 后来我替换了其中的许多图标和图片 但保留了旧的 以防我需要再次使用它们 我现在有大量我的 png 的drawable文件夹中 许多现在都未使用 手动整理它们需要很长时间 有没
  • WIX 生成的 MSI 的自定义卸载程序

    我有一个从 WIX 脚本生成的 MSI 我的问题与此类似question https stackoverflow com questions 563236 custom repair and uninstall funtions for m
  • 为什么我的侧载应用程序在几天后停止工作?

    所以我实际上对 iOS 开发有点陌生 然而 在学习如何操作后 我已经制作了一些应用程序 但我注意到的一件事是 如果我使用手机来测试我的应用程序 该应用程序将在插入时运行 也许一两天后 但在那之后 如果我尝试打开它 它就会停止工作并崩溃 就像
  • 使用lastModified日期搜索DAM资产和Cq页面|查询生成器

    我正在根据上次修改日期查询 cq 页面和资产 以下是必须放入查询生成器调试器中的文本 fulltext geometrix 1 group p or true 1 group 1 group p and true 1 group 1 gro
  • 使用递归求数字之和

    对Java来说相当陌生 但我正在编写一个教程 其中我必须使用递归找到用户输入整数的数字总和 到目前为止 这是我的代码 公开课其他 public static void main String arg Scanner s new Scanne
  • 无法使用带有 socket.io 的媒体源从媒体记录器跳转到流

    当首先加载视频观察客户端然后加载网络摄像头客户端时 以下代码可以正常工作 但是 如果顺序交换或以任何方式中断流 例如通过刷新任一客户端 则流将失败并且媒体源会将其就绪状态更改为关闭 我的假设是 在开始时接收的视频需要初始化标头才能启动 并且
  • R:使用字符串作为参数来改变 dplyr 中的动词

    我正在构建一个闪亮的应用程序 它需要允许用户定义新的绘图变量 具体来说 我想允许用户定义要在 mutate 动词中使用的表达式 服务器接收文本形式的表达式 我想知道如何让 mutate 在 dplyr 0 7 中执行它 我可以使用 muta
  • 循环不断在字符串中添加空格?

    我有以下代码 sHexPic string to hex sPic sHexPic insert sHexPic begin 2 sHexPic insert 2 我想知道如何将其放入计数循环中并在每第二个字符后添加一个空格 到目前为止 这
  • HTACCESS 404 错误无法正常工作

    问题 在此服务器上找不到请求的 URL welcome php 此外 尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误 事情是这样的 当我访问 www mysite com page 时它工作正常 如果
  • Symfony 管理生成器原则executeCreate

    感谢您对此的帮助 我对 Symfony 框架非常陌生 所以只是想了解一下它 我希望能够拦截从管理区域提交的表单并修改数据 这是我到目前为止所得到的 基本形式 apps backend modules proposition actions
  • Google Chrome/Safari 相同的浏览器名称和版本!

    我有一个 asp net 网站 我在其中检查支持的浏览器 那是我的用户 Request Browser Browser 浏览器名称 和 Request Browser MajorVersion 浏览器版本 这里的问题是浏览器 Safari
  • Drupal 用户配置文件页面中的自定义菜单选项卡

    我想在用户个人资料页面顶部的 查看 编辑 文件 菜单链接旁边添加一个菜单项 当用户单击它时 它的行为应该与其他页面类似 因为它不仅启动到新页面 而且他们单击的菜单项 我们称之为 时髦按钮 会变成灰色 并且用户仍停留在新页面中 用户个人资料区
  • 如何向 CSV 文件添加列?

    我有以下 CSV 文件 header 1 header 2 header 3 summin 1 summin 2 summin 3 summin 4 summin 5 summin 6 我如何使用 CSV 类附加一列数据 结果将如下所示 h
  • C# 中线程之间发送消息

    如何在线程之间发送和接收消息 例如 一种解决方案是共享并发队列 尽管它的名称 并发队列 http msdn microsoft com en us library dd267265 aspx 这将允许您将一个对象从一个线程入队 并让另一个线