+-
在C#中的线程之间发送消息
如何在线程之间发送和接收消息?
最佳答案
一种解决方案是共享一个并发队列,例如(尽管其名称为 ConcurrentQueue).这将允许您从一个线程中使一个对象入队,并使另一个线程(或其他线程)从该队列中出队.由于它是通用解决方案,因此您可以传递强类型的项,从字符串到Action都可以,或者您自己的自定义消息类也可以.

Threre只是此方法的一个限制,ConcurrentQueue类仅在.NET 4.0及更高版本中可用.如果在.NET的早期版本中需要此文件,则需要寻找第三方库.例如,您可以拿source for ConcurrentQueue from mono.

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

充分的发布者(根据faq):我是其中一个第三方库的作者… my libraries(可提供Nuget),它包括一个基于自定义实现的旧版本.NET的backport ConcurrentQueue.您可以在Theraot.Collections.ThreadSafe.SafeQueue下找到底层结构,它是数组的链接列表(保存在对象池中),通过这种方式,我们不需要复制数组即可增长(因为我们只是将另一个节点添加到列表中),并且我们不需要经常依赖同步机制(因为添加或删除项目不会经常修改列表).

注意:这个问题曾经用于链接到HashBucket,该哈希塔托管在另一个存储库中,是我针对该问题的旧解决方案.该项目已终止,请使用我上面提到的版本.

点击查看更多相关文章

转载注明原文:在C#中的线程之间发送消息 - 乐贴网