草庐IT

单调队列

全部标签

c# - 在 C# 中实现阻塞队列

我使用下面的代码来实现和测试阻塞队列。我通过启动5个并发线程(移除器)从队列中拉出项目来测试队列,如果队列为空则阻塞,并启动1个并发线程(加法器)间歇性地将项目添加到队列中。但是,如果我让它运行足够长的时间,我会得到一个异常,因为即使队列为空,移除线程之一也会退出等待状态。有谁知道为什么我得到异常?请注意,我很想知道为什么这与有效的解决方案不同(因为我可以谷歌搜索)。非常感谢您的帮助。usingSystem;usingSystem.Threading;usingSystem.Collections.Generic;namespaceCode{classQueue{privateList

c# - 不在 NServiceBus 中自动创建队列

我正在运行NServiceBus3.0.0rc2,但是当我启动应用程序(作为本地管理员)而没有预先创建MSMQ时,它出现以下错误:Thequeuedoesnotexistoryoudonothavesufficientpermissionstoperformtheoperation.使用NServiceBus2.6时不会发生这种情况。下面是我的配置:varbus=Configure.With().Log4Net().NinjectBuilder().XmlSerializer().DefiningCommandsAs(t=>typeof(ICommand).IsAssignableFr

c# - 使用 Amazon SQS 的最佳实践 - 轮询队列

我正在设计一项服务,用于为我们的电子商务网站发送电子邮件(订单确认、提醒等...)计划是有一个“SendEmail”方法,它生成一个表示要发送的电子邮件的XMLblock,并将其粘贴到AmazonSQS队列中。我的网络应用程序和其他应用程序将使用它来“发送”电子邮件。然后我需要一种检查队列并实际发送电子邮件的方法。(我知道我将如何发送电子邮件)我很好奇“轮询”队列的最佳方式是什么?我是否应该创建一个Windows服务,并使用类似Quartz.net的东西来安排它每隔x分钟检查一次队列?有更好的方法吗? 最佳答案 听起来更像Amazo

c# - .net 中的线程安全队列(列表)

我需要为要添加到lucene索引的项目创建一个线程安全列表。下面的线程安全吗?publicsealedclassIndexQueue{staticreadonlyIndexQueueinstance=newIndexQueue();privateListitems=newList();privateIndexQueue(){}publicstaticIndexQueueInstance{get{returninstance;}}privateobjectpadlock=newobject();publicvoidAddItem(stringitem){lock(padlock){ite

c# - 可观察的堆栈和队列

我正在寻找Stack和Queue的INotifyCollectionChanged实现。我可以自己动手,但我不想重新发明轮子。 最佳答案 我遇到了同样的问题,想与其他人分享我的解决方案。希望这对某人有帮助。publicclassObservableStack:Stack,INotifyCollectionChanged,INotifyPropertyChanged{publicObservableStack(){}publicObservableStack(IEnumerablecollection){foreach(varitem

c# - 无法确定具有指定格式名称的队列是否存在

执行以下代码时出现异常。有什么想法吗?stringqueueName="FormatName:Direct=TCP:1.1.1.1\\Private$\\test";MessageQueuequeue;if(MessageQueue.Exists(queueName))queue=newSystem.Messaging.MessageQueue(queueName);elsequeue=MessageQueue.Create(queueName);queue.Send(sWriter.ToString());编辑:这是异常消息和堆栈跟踪的第一行Cannotdeterminewhethe

c# - 消息队列系统

我正在编写一个消息队列系统。我的问题是......用文件或数据库来做这个队列更好吗?如果我选择数据库,它需要每秒检查新作业,这对我来说似乎有点开销?如果是文件,我猜你只是不断地监视文件夹并根据它执行?BR, 最佳答案 不要reinventthewheel.[编辑:2014年更新,现在链接到rabbitMQ,因为Ayende已经开始制作文档数据库而不是消息队列,但RabbitMQ又出现了。我不会写这篇文章,但现在帖子需要30个字符,所以我需要多说几句。] 关于c#-消息队列系统,我们在St

c# - 如何(以及是否)使用 TPL 编写单一消费者队列?

我最近听到了很多关于.NET4.0中的TPL的播客。它们中的大多数描述了后台事件,例如下载图像或进行计算,使用任务以使工作不会干扰GUI线程。我处理的大部分代码更多地具有多生产者/单一消费者的风格,其中来自多个来源的工作项必须排队,然后按顺序处理。一个例子是日志记录,其中来自多个线程的日志行被顺序排列到一个队列中,以便最终写入文件或数据库。来自任何单一来源的所有记录必须保持有序,并且来自同一时刻的记录在最终输出中应该彼此“接近”。所以多个线程或任务或任何东西都在调用队列:lock(_queue)//orusealock-freequeue!{_queue.enqueue(some_wo

c# - 理解调度队列

我想我需要一些帮助来理解DispatcherQueue。当新工作到达时,它会被添加到调度程序队列的开头,而当Dispatcher想要处理工作项时,它会从开头被删除。更一般地说:如果有工作,它将以FIFO方式存储在队列中,并在没有剩余工作时进行处理。MSDN文档here是指loop和frame:Dispatcher在循环中处理工作项队列。循环称为帧。但是在这种情况下循环在哪里?对我来说,循环是指迭代某些东西,当它到达终点时,它会重新开始。frame的概念是什么?根据MSDN文档,一个框架是队列中工作项目的一部分?如果是这样,应该如何使用静态方法Disptatcher.PushFrame(

c# - 多线程.NET队列问题

我的代码中有一个奇怪的错误。这种情况极为罕见(可能每隔几周发生一次),但它确实存在,我不确定为什么。我们有2个线程在运行,1个线程获取网络消息并将它们添加到队列中,如下所示:DataMessages.Enqueue(newDataMessage(client,msg));另一个线程从这个队列中取出消息并处理它们,就像这样:while(NetworkingClient.DataMessages.Count>0){DataMessagemessage=NetworkingClient.DataMessages.Dequeue();switch(message.messageType){..