Tag: queue

在C#中排队

虽然这个问题听起来像是重复的,但我搜索了很多但却找不到合适的解决方案。 我有以下课程 public enum ChangeType { Add, Modify, Delete } public enum ChangedObjectType { Project, Customer, Border, Photo } public struct ChangeInfo { public ChangeType typeofChange { get; private set; } public ChangedObjectType objectType { get; private set; } public string objectID { get; private set; } public ChangeInfo(ChangeType changeType, ChangedObjectType changeObj, string objectId):this() { […]

如何在Azure Service Bus主题上删除DeadLetter消息

我正在写一段代码,这将允许我们: 查看Azure Service Bus主题(Peek)中存在的所有死信消息的列表 修复并将它们发送回主题 重新发送时从死信队列中删除它们。 前2分我没有问题; 使用Peek接收模式,我可以显示消息列表,我们可以编辑和重新发送,没有任何问题。 当我想要实际从死信队列中删除消息时,问题出现了。 我们如何通过消息级别对消息执行此操作? 我们可能只想删除驻留在死信队列中的2条消息,并保留其他消息以便稍后查看。 在死信队列中的消息上调用.Complete()是否像在主订阅中那样删除它? 以供参考; 这是我们获取死信队列的SubscriptionClient代码: private SubscriptionClient GetOrCreateSubscriptionClient(string connectionString) { if (!NamespaceManager.TopicExists(_topicName)) { NamespaceManager.CreateTopic(new TopicDescription(_topicName) { MaxSizeInMegabytes = 5120, DefaultMessageTimeToLive = TimeSpan.FromSeconds(DEFAULT_LOCK_DURATION_IN_SECONDS) }); } if (!NamespaceManager.SubscriptionExists(_topicName, _subscriptionName)) { NamespaceManager.CreateSubscription(_topicName, _subscriptionName); } var deadLetterPath = SubscriptionClient.FormatDeadLetterPath(_topicName, _subscriptionName); var client = SubscriptionClient.CreateFromConnectionString( connectionString, deadLetterPath, _subscriptionName, ReceiveMode.PeekLock); return client; […]

C#创建函数队列

我写了一个名为QueueManager的类: class QueueManager { Queue functionsQueue; public bool IsEmpty { get { if (functionsQueue.Count == 0) return true; else return false; } } public QueueManager() { functionsQueue = new Queue(); } public bool Contains(Action action) { if (functionsQueue.Contains(action)) return true; else return false; } public Action Pop() { return functionsQueue.Dequeue() as Action; } public void […]

没有依赖关系的C#队列或ServiceBus?

是否有可以实现零依赖部署的产品(理想情况下是开源的,但不是必需的)? 我能够找到的每个服务总线或队列库都依赖于其中一个队列应用程序(如msmq)或数据库。 我想要一个非常轻量级的解决方案,我可以添加对我的应用程序的引用,构建它,并使用尽可能少的配置部署它。 在理想的世界中,队列/服务总线将在IIS上运行,并允许Web和富客户端与之通信。 这样的工具对于本地开发机器上的大型分布式系统的快速原型设计是理想的。

如何实现自己的高级生产者/消费者场景?

注意: 我对我的问题进行了彻底的修改。 您可以通过更改历史记录查看原始问题。 我需要一个“强大”的队列,它提供以下function: 我有一组对象的特定范围。 这意味着A 组,B组 ……将拥有自己的队列 我在组范围的线程中填充队列线程A (生产者) 我正在读取组范围的线程中的队列线程B (消费者) 所以我将有以下场景: 队列中有没有项目(因为作业是用空的“targetgroup”调用的): 线程B应该逃脱循环 队列中当前没有项目,因为线程A正在处理要排队的项目: 线程B应该等待 队列中有项目: 线程B应该能够出列并处理该项目 队列中没有项目,因为线程A没有更多要排队的项目: 线程B应该转义循环 现在我想出了以下实现: public class MightyQueue where T : class { private readonly Queue _queue = new Queue(); private bool? _runable; private volatile bool _completed; public bool Runable { get { while (!this._runable.HasValue) { Thread.Sleep(100); } […]

使用并发启用队列

我有一个先前的问题 ,我提供了解决方案; 但是,因为我在.Net 3.5上,所以我无法访问ConcurrentQueue 。 我需要Queue来允许并发。 我读了这个问题 ,如果一个项目不在队列中并且线程方法试图使项目出列,则似乎存在问题。 我现在的任务是确定是否可以派生自己的并发队列类。 这就是我提出的: public sealed class ConcurrentQueue : Queue { public event EventHandler TableQueued; private ICollection que; new public void Enqueue(DataTable Table) { lock (que.SyncRoot) { base.Enqueue(Table); } OnTableQueued(new TableQueuedEventArgs(Dequeue())); } // this is where I think I will have a problem… new public DataTable Dequeue() { DataTable […]

如何(以及如果)使用TPL编写单个使用者队列?

我最近听说过很多关于.NET 4.0中TPL的播客。 他们中的大多数使用任务描述后台活动,如下载图像或进行计算,以便工作不会干扰GUI线程。 我工作的大多数代码都有更多的多生产者/单一消费者风格,其中来自多个来源的工作项必须排队,然后按顺序处理。 一个示例是日志记录,其中来自多个线程的日志行被顺序化为单个队列,以便最终写入文件或数据库。 来自任何单一来源的所有记录必须保持有序,并且来自同一时刻的记录应该在最终输出中彼此“接近”。 因此,多个线程或任务或任何调用队列的任何东西: lock( _queue ) // or use a lock-free queue! { _queue.enqueue( some_work ); _queueSemaphore.Release(); } 专用工作线程处理队列: while( _queueSemaphore.WaitOne() ) { lock( _queue ) { some_work = _queue.dequeue(); } deal_with( some_work ); } 将工作线程专门用于这些任务的消费者方面似乎总是合理的。 我应该使用TPL中的某些构造来编写未来的程序吗? 哪一个? 为什么?

为什么Stack 和Queue 用数组实现?

我正在Albahari兄弟的Nutshell中阅读C#4.0,我发现了这个: 堆栈在内部实现,其数组根据需要resize ,与Queue和List一样。 (第288页,第4段) 我不禁想知道为什么。 LinkedList提供O(1)头尾插入和删除(这应该适用于堆栈或队列)。 可resize的数组有O(1)缓冲插入(如果我没记错的话),但O(n)最坏的情况(我不确定删除)。 它可能比链表使用更多的空间(对于大型堆栈/队列)。 还有更多吗? 双链表实现的缺点是什么?

可观察的堆栈和队列

我正在寻找Stack和Queue的INotifyCollectionChanged实现。 我可以自己动手,但我不想重新发明轮子。