Tag: 生产者 消费者

使用命名的互斥锁来锁定文件

我正在使用一个命名的互斥锁来锁定对文件的访问(使用路径’strFilePath’),如下所示: private void DoSomethingsWithAFile(string strFilePath) { Mutex mutex = new Mutex(false,strFilePath.Replace(“\\”,””)); try { mutex.WaitOne(); //do something with the file…. } catch(Exception ex) { //handle exception } finally { mutex.ReleaseMutex(); } } 因此,这样代码只会在处理相同文件时阻塞线程。 好吧,我测试了这个似乎工作正常,但我真的想知道你对此的想法。

通用.Net制作人/消费者

我想要在C#中实现通用的生产者/消费者对+处理队列以获得乐趣。 我们的想法是你可以创建实现适当的IProducer和IConsumer接口(提供默认实现)的对象,它们主要由委托组成,将它们传递给QueueProcessor类实例,告诉它你想要多少个消费者,然后去。 但我对自己说,“自我,这肯定已经做过了。” 那么有没有人知道C#中生产者/消费者模式的良好 通用实现(VB.Net也可以)? 我正在寻找的基本要求: 对生成和使用的类型(输入,排队任务和输出类型或其任何组合)使用generics 允许您指定将为队列工作的消费者数量 允许您将多个队列链接或链接到管道中(对于多个消费者来说很棘手,我知道) 允许您实施自己的生产者和消费者 允许你将任何IEnumerable转换为生产者(好吧,如果我必须自己实现,只要它可能) 基于委托(您可以使用lambda语法为基本消费者或生产者工作处理单个项目) 或者如果没有,那么什么陷阱阻止了它,你对如何实现它有任何想法吗?

RabbitMQ C#API基于事件的消息消费

while (true) { BasicDeliverEventArgs e = (BasicDeliverEventArgs)Consumer.Queue.Dequeue(); IBasicProperties properties = e.BasicProperties; byte[] body = e.Body; Console.WriteLine(“Recieved Message : ” + Encoding.UTF8.GetString(body)); ch.BasicAck(e.DeliveryTag, false); } 这是我们通过订阅检索消息时所做的事情。我们使用While循环,因为我们希望消费者不断地听…如果我想让它甚至基于…那就是当时新消息到达队列的时候只有消费者应该消费消息..或任何类似的事件..

Monitor.Wait需要同步吗?

我已经开发了一个通用的生产者 – 消费者队列,它由Monitor以下列方式产生脉冲: 入队: public void EnqueueTask(T task) { _workerQueue.Enqueue(task); Monitor.Pulse(_locker); } 出队: private T Dequeue() { T dequeueItem; if (_workerQueue.Count > 0) { _workerQueue.TryDequeue(out dequeueItem); if(dequeueItem!=null) return dequeueItem; } while (_workerQueue.Count == 0) { Monitor.Wait(_locker); } _workerQueue.TryDequeue(out dequeueItem); return dequeueItem; } wait部分产生以下SynchronizationLockException:“从非同步代码块调用对象同步方法”我是否需要同步它? 为什么? 使用ManualResetEvents还是Slim版本的.NET 4.0会更好吗?

多个生产者,单个消费者

我必须开发一个multithreading应用程序,其中将有多个线程,每个线程生成自定义事件日志并需要保存在队列中保存(不是微软MSMQ)。 将有另一个线程从队列中读取日志数据并使用某些信息对其进行操作以将日志信息保存到文件中。基本上,我们在这里实现多个生成器单个消费者范例。 任何机构都可以建议我如何在C ++或C#中实现它。 谢谢,