草庐IT

c# - System.Timers.Timer/Threading.Timer 与 Thread with WhileLoop + Thread.Sleep 用于周期性任务

在我的应用程序中,我必须定期向“兄弟”应用程序发送心跳。使用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旨

C# 定时器或 Thread.Sleep

我正在运行Windows服务并使用循环和Thread.Sleep重复任务,使用计时器方法会更好吗?如果是,一个代码示例会很棒我目前正在使用这段代码来重复intcurMinute;intlastMinute=DateTime.Now.AddMinutes(-1).Minute;while(condition){curMinute=DateTime.Now.Minute;if(lastMinute 最佳答案 IMO,计时器是个更好的主意。这样,如果您的服务被要求停止,它可以非常快速地做出响应,并且不会再次调用计时器滴答处理程序.....

c# - Windows.Forms.Timer 或 System.Threading.Timer

我有一个运行许多线程的应用程序。每个线程都应该有一个计时器来检查该线程范围内的某些内容。我的问题是:我应该使用哪个计时器,它们之间有什么区别? 最佳答案 本文提供了一个很好的比较,应该包含您需要的信息:ComparingtheTimerClassesinthe.NETFrameworkClassLibrary:Windows.FormsSystem.TimersSystem.ThreadingTimereventrunsonwhatthread?UIthreadUIorworkerthreadWorkerthreadInstance

c# - Thread.Sleep(1) 有什么特别之处吗?

JoeDuffy(ConcurrentProgrammingonWindows的作者)在thisblogarticle中写道Thread.Sleep(1)优于Thread.Sleep(0),因为它会挂起相同和较低优先级的线程,而不仅仅是与Thread.Sleep(0)相同优先级的线程。.NETversionofMSDNsaysThread.Sleep(0)比较特殊,它会挂起这个线程,让其他等待的线程执行。但它没有提及Thread.Sleep(1)(对于任何.NET版本)。那么,Thread.Sleep(1)实际上做了什么特别的事情吗?背景:我正在更新并发编程方面的知识。我写了一些C#代

c# - 为什么我们需要 Thread.MemoryBarrier()?

在“C#4inaNutshell”中,作者展示了这个类有时可以在没有MemoryBarrier的情况下写入0,尽管我无法在我的Core2Duo中重现:publicclassFoo{int_answer;bool_complete;publicvoidA(){_answer=123;//Thread.MemoryBarrier();//Barrier1_complete=true;//Thread.MemoryBarrier();//Barrier2}publicvoidB(){//Thread.MemoryBarrier();//Barrier3if(_complete){//Thre

c# - 如何像中止线程一样中止任务(Thread.Abort 方法)?

我们可以中止Thread像这样:Threadthread=newThread(SomeMethod);...thread.Abort();但是我可以中止Task(在.Net4.0中)以同样的方式而不是取消机制。我想立即杀死任务。 最佳答案 你不应该使用Thread.Abort()任务可以取消但不能中止。Thread.Abort()方法被(严重)弃用。线程和任务在停止时都应该合作,否则您将面临使系统处于不稳定/未定义状态的风险。如果您确实需要运行一个进程并从外部终止它,唯一安全的选择是在单独的AppDomain中运行它。这个答案是关于

c# - 无法将类型 'string' 隐式转换为 'System.Threading.Tasks.Task<string>'

我是异步编程的新手,所以在看了一些异步示例代码之后,我想到了写一个简单的异步代码我创建了一个简单的Winform应用程序,并在Form中编写了以下代码。但它就是不起作用privateTaskmethodAsync(){Thread.Sleep(10000);return"Hello";//Error:Cannotimplicitlyconverttype'string'to'System.Threading.Tasks.Task'}privateasyncvoidbutton1_Click(objectsender,EventArgse){strings=awaitmethodAsyn

c# - 使用 Thread.Abort() 有什么问题

所以我知道你不应该使用Thread.Abort()但我从来没有得到很好的解释。是否存在性能损失或一些隐藏的问题?我知道你不能忽略/吞下ThreadAbortException(这是有道理的) 最佳答案 除了这里所有其他好的答案之外,让我补充一点,不能保证对Thread.Abort的调用实际上会中止有问题的线程。可以(虽然不是特别容易)“强化”线程以防止中止。例如,如果您因为认为线程正在运行恶意代码而中止线程,那么恶意代码可能正在抵抗其自身的破坏。如果您有一个长时间运行的操作涉及不属于您的代码且必须彻底删除,正确的方法是将该代码放入它

c# - 为什么 .NET 内部哈希表中有一个 Thread.Sleep(1)?

最近我在阅读.NET的实现Hashtable并遇到了一段我不明白的代码。部分代码为:intnum3=0;intnum4;do{num4=this.version;bucket=bucketArray[index];if(++num3%8==0)Thread.Sleep(1);}while(this.isWriterInProgress||num4!=this.version);整个代码在System.Collections.Hashtable(mscorlibVersion=4.0.0.0)的publicvirtualobjectthis[objectkey]中。问题是:Thread.

C# 线程终止和 Thread.Abort()

在MSDN中,Thread.Abort()方法的描述是这样说的:“调用此方法通常会终止线程。”为什么不总是?在哪些情况下它不会终止线程?是否还有其他终止线程的可能性? 最佳答案 Thread.Abort()在线程上注入(inject)一个ThreadAbortException。线程可以通过调用Thread.ResetAbort()取消请求。此外,还有某些代码部分,例如finallyblock将在处理异常之前执行。如果由于某种原因线程被卡在这样的block中,则永远不会在线程上引发异常。由于在调用Abort()时调用者对线程状态的控