草庐IT

thread_safe

全部标签

c# - 如何获得 System.Threading.Tasks.Task 已完成的通知

我目前正在使用.net4中新的System.Threading.Tasks功能用新的实现替换一些自制任务功能。虽然我有一个小问题,虽然我可以想到一些解决方案,但我希望得到一些建议,以了解通常最好的方法,以及我是否在某处遗漏了技巧。我需要的是任意进程能够启动任务但随后继续执行而不是等待任务完成。没问题,但是当我需要对任务的结果做某事时,我不太确定最好的方法。我见过的所有示例都在任务上使用Wait()直到它完成或引用任务上的Result参数。这两个都会阻塞启动任务的线程,这是我不想要的。我想到的一些解决方案:创建一个新线程并在其上启动任务,然后使用Wait()或.Result阻塞新线程并以

c# - 使用 Thread.Sleep() 总是不好的吗?

我为Random类创建了一个扩展方法,它随机执行一个Action(voiddelegate):publicstaticclassRandomExtension{privatestaticbool_isAlive;privatestaticTask_executer;publicstaticvoidExecuteRandomAsync(thisRandomrandom,intmin,intmax,intminDuration,Actionaction){TaskouterTask=Task.Factory.StartNew(()=>{_isAlive=true;_executer=Tas

c# - 为什么 Thread.CurrentPrincipal 需要 "await Task.Yield()"才能正确流动?

以下代码已添加到新创建的VisualStudio2012.NET4.5WebAPI项目中。我正在尝试同时分配HttpContext.Current.User和Thread.CurrentPrincipal在异步方法中。Thread.CurrentPrincipal的赋值除非awaitTask.Yield();否则流程不正确(或任何其他异步)被执行(将true传递给AuthenticateAsync()将导致成功)。这是为什么?usingSystem.Security.Principal;usingSystem.Threading.Tasks;usingSystem.Web.Http;n

Java中Thread详解(一篇就够了)

前言操作系统中,一个进程往往代表着一个应用程序实例,而线程是进程中轻量级的调度单元,也可以看作是轻量级的进程,可以共享进程资源。下面简单介绍在操作系统中线程通用实现方式。接下来内容主要对线程模型进行简单介绍,然后对Java线程实现Thread类进行了解。线程模型暂且抛开Java线程,先说明一下在操作系统中,线程通用的几种实现方式。实现线程主要有三种方式。内核线程模型使用内核线程实现的方式,通常也被成为1:1实现模型。内核线程(KernelLevelThread,KLT)是直接由操作系统内核来支持的线程,这种线程由内核来控制切换,内核通过调度器(Scheduler)来对线程进行调度,并负责将线程

c# - Thread.Sleep() 的替代品

我们希望每N分钟运行一次任务列表。所以我们创建了一个带有的任务执行器do{DoWork();}while(!stopRequested)现在我们想在工作周期之间暂停一下。每个人似乎都认为Thread.Sleep()是魔鬼。我看到有人提到使用Monitor/Event的东西,但我们没有其他人告诉我们去做工作。我们只想每N分钟做一些事情,比如发条。那么是否有替代方法或者我是否找到了Thread.Sleep的有效用法?有人在另一篇文章中提到WaitHandle.WaitOne()作为替代方法,但您显然不能从非静态方法中调用它?或者至少我不能,因为我得到一个编译时错误..Anobjectref

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