假设,我没有通过调用函数显式设置任何值:System.Threading.ThreadPool.SetMaxThreads默认值是多少? 最佳答案 这取决于.NET框架版本,在2.0、3.0和4.0中发生了变化。在2.0中,它是核心数量的50倍。在3.0(又名2.0SP1)中,它是内核数量的250倍,4.0使其根据位数和操作系统资源动态变化。如果我没记错的话,最大I/O完成线程数始终为1000。一般来说,它非常高,一个程序应该永远接近。在32位机器上,当所有这些线程用它们的1兆字节堆栈消耗可用的虚拟内存时,程序很可能首先用OOM轰炸
我已经广泛使用了大部分Threading库。我非常熟悉创建新线程、创建BackgroundWorkers和使用内置的.NETThreadPool(它们都非常酷)。但是,我从来没有找到使用Task的理由类(class)。我可能见过一两个人们使用它们的例子,但是这些例子不是很清楚,而且它们没有给出一个高层次的概述,说明为什么应该使用任务而不是新线程。问题1:从高层次上看,与.NET中的其他并行性方法相比,什么时候使用任务有用?问题2:有人有简单和/或中等难度的示例来演示如何使用任务吗? 最佳答案 使用Task有两个主要优点:Task可以
据我了解,Task和Thread之间的区别在于任务发生在线程池中,而线程是我需要自己管理的东西..(并且该任务可以取消并返回到线程-池在他的任务结束时)但在一些博客中我读到如果操作系统需要创建任务和创建线程=>它会更容易创建(和销毁)任务。有人可以解释为什么创建任务很简单那个线程吗?(或者我在这里遗漏了一些东西......) 最佳答案 我认为当你说Task是一个System.Threading.Task时你在说什么.如果是这样,那么您可以这样考虑:一个程序可以有多个线程,但一个处理器内核一次只能运行一个线程。线程非常昂贵,并且在正在
我有一个Windows服务应用程序。并通过在控制台模式下运行来调试它。在这里http://support.microsoft.com/kb/842793据说Timers.Timer有一个错误并且不会在Windows服务中触发。解决方法是使用Threading.Timer并且本文适用于.NET1.0和1.1我正在使用.NET4,但一段时间后Threading.Timer也没有触发。那么这可能是什么原因呢?作为解决方法,您有什么建议?谢谢,最好的问候编辑:我将计时器从Threading.Timer更改为Timers.Timer,它可以正常工作。 最佳答案
我正在编写一个需要使用Timer的应用程序,但其中可能有很多。System.Threading.Timer类的可扩展性如何?文档只是说它是“轻量级”,但没有进一步解释。这些计时器是否被吸收到代表Timer处理所有回调的单个线程(或非常小的线程池)中,或者是否每个Timer都有自己的线程?我想用另一种方式来改写这个问题:System.Threading.Timer是如何实现的? 最佳答案 我这样说是为了回答很多问题:不要忘记框架的(托管)源代码是可用的。您可以使用此工具来获取所有信息:http://www.codeplex.com/N
使用BackgroundWorker创建线程和使用System.Threading.Thread创建线程有什么区别? 最佳答案 BackgroundWorker类基本上抽象了Thread创建和监控过程,并为您提供一个事件驱动的API来报告操作的进度(ProgressChanged)并确定您的操作何时完成(RunWorkerCompleted)...它最常见的用途之一是在长时间运行的进程在后台执行时保持WindowsGUI响应。所以基本上,它只是System.Threading.Thread的包装器,旨在使后台线程更简单一些(顾名思义
我目前正在使用.net4中新的System.Threading.Tasks功能用新的实现替换一些自制任务功能。虽然我有一个小问题,虽然我可以想到一些解决方案,但我希望得到一些建议,以了解通常最好的方法,以及我是否在某处遗漏了技巧。我需要的是任意进程能够启动任务但随后继续执行而不是等待任务完成。没问题,但是当我需要对任务的结果做某事时,我不太确定最好的方法。我见过的所有示例都在任务上使用Wait()直到它完成或引用任务上的Result参数。这两个都会阻塞启动任务的线程,这是我不想要的。我想到的一些解决方案:创建一个新线程并在其上启动任务,然后使用Wait()或.Result阻塞新线程并以
在我的应用程序中,我必须定期向“兄弟”应用程序发送心跳。使用System.Timers.Timer/Threading.Timer或使用带有while循环和Thread.Sleep的线程更好吗?心跳间隔为1秒。while(!exit){//doworkThread.Sleep(1000);}或myTimer.Start(()=>{//dowork},1000);//pseudocode(notactualsyntax)... 最佳答案 System.Threading.Timer有我的投票权。System.Timers.Timer旨
我有一个运行许多线程的应用程序。每个线程都应该有一个计时器来检查该线程范围内的某些内容。我的问题是:我应该使用哪个计时器,它们之间有什么区别? 最佳答案 本文提供了一个很好的比较,应该包含您需要的信息:ComparingtheTimerClassesinthe.NETFrameworkClassLibrary:Windows.FormsSystem.TimersSystem.ThreadingTimereventrunsonwhatthread?UIthreadUIorworkerthreadWorkerthreadInstance
我是异步编程的新手,所以在看了一些异步示例代码之后,我想到了写一个简单的异步代码我创建了一个简单的Winform应用程序,并在Form中编写了以下代码。但它就是不起作用privateTaskmethodAsync(){Thread.Sleep(10000);return"Hello";//Error:Cannotimplicitlyconverttype'string'to'System.Threading.Tasks.Task'}privateasyncvoidbutton1_Click(objectsender,EventArgse){strings=awaitmethodAsyn