草庐IT

线程队列

全部标签

c# - 有没有办法获取在 Kestrel/ASP.NET Core 中请求队列中花费的时间?

我的理解是ASP.NETCore中间件在准备好处理请求时运行。但是,如果应用程序处于负载状态并且ASP.NETCore无法处理所有传入的请求,它们会被放入某处的“队列”中吗?我不知道这是否是Kestrel内部的某个托管队列,或者它是否与libuv有关。我想知道给定的请求在这个队列中花费了多长时间。HttpContext上有什么东西可以告诉我这个吗?提前致谢 最佳答案 这题没那么简单。如果你想跟踪所有的时间,你必须做很多步骤。在开始时为请求添加一个独特的戳记或打勾,以便您可以一一识别它们。其次,创建一个处理程序,它会拦截您的请求并记录

c# - 托管 clr 并捕获线程异常

我正在尝试编写一个可以加载托管插件的插件系统。如果有任何异常,主机应该能够卸载插件。对于我的poc,我在C#中有一个示例代码库,它会抛出这样的异常...publicstaticintStartUp(stringarguments){Console.WriteLine("Startedexceptionthrowerwithargs{0}",arguments);ThreadworkerThread=newThread(()=>{Console.WriteLine("Startingathread,doingsomeimportantwork");Thread.Sleep(1000);t

c# - 要使用多少线程?

我知道有一些现有的问题,它们提供了对事物的非常好的总体看法。我希望获得有关的C#/VB.Net方面的一些详细信息实际执行(不是哲学)其中一些观点。我的特殊情况我有一个WCF服务,其中包括接收文件。在服务的大部分时间里,这个特定的区域实际上只是坐在那里什么都不做——当工作来临时,它会以大不相同的数量到达。对于接收到的每个文件(最多每秒数千个),服务需要处理文件1-10秒(每个),具体取决于许多其他服务、本地资源和网络IO等待时间。为了帮助处理这些突发工作负载的服务,我实现了一个队列系统。每秒收到的数千个文件被放入队列中。Controller根据队列的大小计算要使用的线程数,直到达到“峰值

c# - 使用 Kinect 线程

我正在编写一个使用Kinect的C#应用程序,我正在获取当前输出并将其写入着色器资源并将其渲染为纹理,我的问题是Kinect(显然)仅以30fps运行,所以它严重限制了我的表现。克服这个问题的最佳方法是什么,是多线程吗?是否有某种设计模式可以帮助解决此类问题?据我所知,我可能想让kinect在线程上处理数据,然后在进程完成时访问它,但我不确定从哪里开始以安全的方式开始。感谢您提供的任何建议。我目前将OpenNI用于kinect驱动程序/api,将SlimDX用于渲染的directX端。 最佳答案 我之前没有使用过Kinect,你也没

c# - 在 .NET 4 中,BeginInvoke 和 Task 是否使用相同的线程池?

.NET4引入了全新的线程池设计,可由任务并行库访问。但是,如果我有使用Delegate.BeginInvoke的旧代码,这些代码会由那个新线程池执行吗?或者旧的线程池是否仍在运行时的某个地方? 最佳答案 它们都使用相同的线程池。ThreadPool.QueueUserWorkItem也是如此。但是,与Task.Factory.StartNew相比,Delegate.BeginInvoke有额外的开销,并且没有利用ThreadPool中的许多功能,例如工作窃取或新的调试功能.如果时间允许,我建议重构它以使用新的任务功能。

c# - 从另一个线程访问 session 数据

我这里有个问题。在我的网络应用程序中,我有一个页面启动另一个线程来完成耗时的任务。在这个新线程中,我调用了我的一种架构方法(在另一个项目中-一个架构项目)。问题是:在其中一种方法中,我访问了HttpContext.Current.Session字段。但是,当我启动应用程序时,会抛出一个异常,提示此对象(HttpContext.Current.Session)具有空引用。我如何将新线程的上下文设置为与HttpApplication上下文相同以便访问HttpContext.Current.Session? 最佳答案 这里有很多事情需要考

c# - ManualResetEventSlim : Calling . Set() 后跟 .Reset() 不会释放 *任何* 等待线程

ManualResetEventSlim:调用.Set()后立即调用.Reset()不会释放任何等待线程(注意:ManualResetEvent也会发生这种情况,而不仅仅是ManualResetEventSlim。)我在发布和Debug模式下都尝试了下面的代码。我在四核处理器上运行的Windows764位上使用.Net4作为32位版本运行它。我从VisualStudio2012编译它(因此安装了.Net4.5)。在我的系统上运行它时的输出是:Waitingfor20threadstostartThread1started.Thread2started.Thread3started.Th

c# - 为什么(或不是)在构造函数中设置字段是线程安全的?

假设您有一个像这样的简单类:classMyClass{privatereadonlyinta;privateintb;publicMyClass(inta,intb){this.a=a;this.b=b;}publicintA{get{returna;}}publicintB{get{returnb;}}}我可以以多线程方式使用这个类:MyClassvalue=null;Task.Run(()=>{while(true){value=newMyClass(1,1);Thread.Sleep(10);}});while(true){MyClassresult=value;if(resul

c# - Webjobs 会自动续订 Azure 队列消息的租约吗?

当Webjobs通过QueueTrigger从Azure存储上的队列获取消息时,它会租用该消息(使其不可见)。如果(webjob的)触发函数需要很长时间来处理消息,这个租约是否会自动延长?或者我应该在函数中处理它?在这个链接上WindowsAzureQueues:ImprovedLeases,ProgressTracking,andSchedulingofFutureWork,作者声明“执行原始出列的工作人员可以延长消息的租约,以便它可以继续处理消息”注意:我尝试了一个等待20分钟的网络作业(使用QueueTrigger)。//WriteLogThread.Sleep(1200000)

c# - MSMQ 一个(队列)到多个(监听器)场景

我有这样的场景:一个客户端将一条消息发送到一个msmq队列实例中,并且有3个进程在监听这个队列。我希望能够让这些实例中的每一个都选择不同的消息并进行处理。我知道这是队列的常见使用场景,我已经使用MSMQ、.NET和C#编写了工作代码。但是我想知道msmq是否是我在这里的最佳选择-文档明确指出MSMQ用于“一对一”通信,这意味着不应该有一个以上的监听器。这让我想知道,我正在为我的用例做正确的解决方案吗?或者反过来,我是否必须为每个监听器创建一个队列并在工作流的前面部分分发消息?非常感谢提供指向演示MSMQ在此类场景中的用法的工作示例的链接。谢谢 最佳答案