gpt4 book ai didi

c# - C#线程间消息传递

转载 作者:太空狗 更新时间:2023-10-30 01:26:45 25 4
gpt4 key购买 nike

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

最佳答案

一个解决方案是共享一个并发队列,例如(虽然它的名字)ConcurrentQueue .这将允许您将一个线程中的对象入队,并让另一个线程(或其他线程)从队列中出队。由于它是一个通用解决方案,您可以传递强类型项,从 stringAction 的任何内容都可以,当然也可以传递您自己的自定义消息类。

这只是此方法的一个限制,ConcurrentQueue 类仅在 .NET 4.0 之后可用。如果你需要这个用于以前版本的 .NET,你需要寻找第三方库。例如,您可以使用 source for ConcurrentQueue from mono .

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


完整披露者(根据 faq ):我是其中一个第三方库的作者... my libraries (nuget 可用),它包括一个基于自定义实现的旧版本 .NET 的反向端口 ConcurrentQueue。你可以在Theraot.Collections.ThreadSafe.SafeQueue下找到底层结构,它是一个数组的链表(保存在对象池中),这样我们就不需要复制数组以增长(因为我们只是向列表添加另一个节点),我们不需要经常依赖同步机制(因为添加或删除项目不会经常修改列表)。

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

关于c# - C#线程间消息传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4237392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com