jjzjj

c# - 如何在 ASP.NET Web API 中对后台任务进行排队

我有一个webapi,旨在以队列方式处理报告。应用程序执行的步骤如下:接收内容将内容映射到一个对象并将其放入队列轮询队列中的未决项目一次处理一个队列中的项目我在考虑使用EntityFramework来创建一个队列项目的数据库,例如:publicclassEFBatchItem{[Key]publicstringBatchId{get;set;}publicDateTimeDateCreated{get;set;}publicDateTimeDateCompleted{get;set;}publicstringBatchItem{get;set;}publicBatchStatusSta

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

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

c# - Queue 上的 IEnumerable 迭代器是否应该使项目出列

我创建了一个实现通用IQueue接口(interface)的自定义通用队列,该接口(interface)使用System.Collections.Generic命名空间中的通用队列作为私有(private)内部队列。示例已清除不相关的代码。publicinterfaceIQueue{voidEnqueue(TQueueItemqueueItem);TQueueItemDequeue();}publicclassCustomQueue:IQueue{privatereadonlyQueuequeue=newQueue();...publicvoidEnqueue(TQueueItemqu

c# - 消息队列系统

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

c# - 线程安全类是否应该在其构造函数的末尾设置内存屏障?

当实现一个旨在线程安全的类时,我是否应该在其构造函数的末尾包含一个内存屏障,以确保任何内部结构在它们可以被访问之前已经完成初始化?还是消费者有责任在使实例对其他线程可用之前插入内存屏障?简化问题:由于在线程安全类的初始化和访问之间缺少内存屏障,下面的代码中是否存在可能导致错误行为的竞争危险?或者线程安全类本身应该防止这种情况发生吗?ConcurrentQueuequeue=null;Parallel.Invoke(()=>queue=newConcurrentQueue(),()=>queue?.Enqueue(5));请注意,程序不入队是可以接受的,如果第二个委托(delegate)

c# - ConcurrentQueue 与 Queue + 锁的性能对比

我必须实现一消费者一生产者标准算法。我可以使用Queue和几个lock语句轻松实现它。或者我可以只使用ConcurrentQueue。什么更好?如果使用Queue+lock那么我可以优化“多次添加/检索”,因为我可以lock一次然后Add很多次。一般情况下哪个更快-ConcurrentQueue或Queue+lock有多大区别?当然ConcurrentQueue是最直接的方式,但我不想在HFT交易应用程序中使用它时失去很多性能。 最佳答案 来自C#inaNutshell:Theconcurrentstack,queue,andbag

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

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

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

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

c# - 懒惰<T> : "The function evaluation requires all threads to run"

我有一个带有一些静态属性的静态类。我在一个静态构造函数中初始化了所有这些,但后来意识到这是浪费,我应该在需要时延迟加载每个属性。所以我转而使用System.Lazytype来完成所有肮脏的工作,并告诉它不要使用它的任何线程安全功能,因为在我的例子中执行总是单线程的。我得到了以下类(class):publicstaticclassQueues{privatestaticreadonlyLazyg_Parser=newLazy(()=>newQueue(Config.ParserQueueName),false);privatestaticreadonlyLazyg_Distributor

javascript - Jquery 排队动画

我有几个动画要在dom中的不同对象上执行。我希望它们按顺序发生。我不想这样做:$('#first').show(800,function(){$('#second').show(800,function(){...etc...});我想将我所有的动画(和CPU密集型函数)添加到某种队列对象,以确保它们按顺序执行。 最佳答案 我不确定您为什么不想使用您描述的方法。如果纯粹从组织的Angular来看,您不必使用匿名函数functionshowFirst(){$('#first').show(800,showSecond);}functi