草庐IT

syscall_thread_switch

全部标签

c# - 在 ThreadPool 中的线程上调用 Thread.Abort

我的同事正在使用我们没有源代码的第三方.NET库。我们正在使用ThreadPool来让大量线程调用此库,偶尔其中一个线程会永远挂起,而其余线程则愉快地运行。所以我们想使用可怕的Thread.Abort来杀死这些线程。我之前在启动自己的线程时已经这样做过,但我从未使用过ThreadPool。如果我们像这样跟踪每个任务的开始时间:staticDictionarystarted=newDictionary();staticvoidDoSomeWork(objectfoo){lock(started)started[Thread.CurrentThread]=DateTime.Now;Some

c# - System.Threading.Task 什么时候有用?

我已经广泛使用了大部分Threading库。我非常熟悉创建新线程、创建BackgroundWorkers和使用内置的.NETThreadPool(它们都非常酷)。但是,我从来没有找到使用Task的理由类(class)。我可能见过一两个人们使用它们的例子,但是这些例子不是很清楚,而且它们没有给出一个高层次的概述,说明为什么应该使用任务而不是新线程。问题1:从高层次上看,与.NET中的其他并行性方法相比,什么时候使用任务有用?问题2:有人有简单和/或中等难度的示例来演示如何使用任务吗? 最佳答案 使用Task有两个主要优点:Task可以

c# - 如何在类型上使用 switch-case?

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Isthereabetteralternativethanthisto'switchontype'?我需要遍历我的类的所有属性并检查它的int类型是否需要做某事,如果它的字符串..然后做某事。我需要它使用开关盒。在这里,我按以下方式使用switch,但它需要一些常量。看下面的代码:publicstaticboolValidateProperties(objecto){if(o!=null){varsourceType=o.GetType();varproperties=sourceType.GetPropert

c# - 这是对 Thread.MemoryBarrier() 的正确使用吗?

假设我有一个字段控制某个循环的执行:privatestaticboolshouldRun=true;我有一个正在运行的线程,其代码如下:while(shouldRun){//Dosomework....Thread.MemoryBarrier();}现在,另一个线程可能会将shouldRun设置为false,而不使用任何同步机制。据我了解Thread.MemoryBarrier(),在while循环中进行此调用将阻止我的工作线程获取shouldRun的缓存版本,并有效地防止无限循环的发生.我对Thread.MemoryBarrier的理解是否正确?鉴于我有可以设置shouldRun变量

c# - 任务(System.Threading.Task)和线程的区别

据我了解,Task和Thread之间的区别在于任务发生在线程池中,而线程是我需要自己管理的东西..(并且该任务可以取消并返回到线程-池在他的任务结束时)但在一些博客中我读到如果操作系统需要创建任务和创建线程=>它会更容易创建(和销毁)任务。有人可以解释为什么创建任务很简单那个线程吗?(或者我在这里遗漏了一些东西......) 最佳答案 我认为当你说Task是一个System.Threading.Task时你在说什么.如果是这样,那么您可以这样考虑:一个程序可以有多个线程,但一个处理器内核一次只能运行一个线程。线程非常昂贵,并且在正在

c# - switch 语句中的 switch 语句?

我必须评估很多条件。就我而言,我必须做这样的事情:switch(id){case5://switchsomeothercasesherecase6://setsomevalue...}在案例5中使用另一个开关是否是好的做法?如果不是,那什么更好?有if语句吗? 最佳答案 我会调用一个特定于案例5的函数,然后在该函数中包含切换案例。例如:switch(id){case5:FunctionFiveSpecific(id);case6://setsomevalue...}案例5的具体功能:privatevoidFunctionFiveSp

c# - 这个 thread.abort() 正常安全吗?

我创建了一个自定义自动完成控件,当用户按下某个键时,它会在另一个线程上查询数据库服务器(使用远程处理)。当用户打字速度非常快时,程序必须取消之前执行的请求/线程。我之前先将它实现为AsyncCallback,但我发现它很麻烦,要遵循太多内部规则(例如AsyncResult、AsyncState、EndInvoke),而且你必须检测BeginInvoke对象的线程,因此你可以终止先前执行的线程。此外,如果我继续AsyncCallback,则那些AsyncCallbacks上没有可以正确终止先前执行的线程的方法。EndInvoke不能终止线程,它仍然会完成被终止线程的操作。我最终还是会在线

c# - System.Threading.Timer 一段时间后没有触发

我有一个Windows服务应用程序。并通过在控制台模式下运行来调试它。在这里http://support.microsoft.com/kb/842793据说Timers.Timer有一个错误并且不会在Windows服务中触发。解决方法是使用Threading.Timer并且本文适用于.NET1.0和1.1我正在使用.NET4,但一段时间后Threading.Timer也没有触发。那么这可能是什么原因呢?作为解决方法,您有什么建议?谢谢,最好的问候编辑:我将计时器从Threading.Timer更改为Timers.Timer,它可以正常工作。 最佳答案

c# - ASP.NET 异常 "Thread was being aborted"导致方法退出

在下面的代码中,有时someFunctionCall()会产生异常:Threadwasbeingaborted.为什么代码块B中的代码永远不会运行?ASP.NET是否为每个方法调用启动一个新线程?我惊讶地发现,当发生此异常时,BlockB中的代码从未运行,方法返回,而我的应用程序继续运行。有人可以解释一下吗?publicvoidmethod(){//CODEBLOCKA//...try{someFunctionCall();//thiscallisgeneratingthreadabortexception}catch(Exceptionex){//logexceptionmessag

c# - 如何对基于枚举的 switch 语句的默认情况进行单元测试

我在工厂中有一个switch语句,它根据传入的枚举值返回一个命令。类似于:publicICommandCreate(EnumTypeenumType){switch(enumType){case(enumType.Val1):returnnewSomeCommand();case(enumType.Val2):returnnewSomeCommand();case(enumType.Val3):returnnewSomeCommand();default:thrownewArgumentOutOfRangeException("UnknownenumType"+enumType);}}