草庐IT

needs_thread_safety

全部标签

c# - System.Threading.Tasks.Dataflow 和 Microsoft.Tpl.Dataflow 之间有什么区别

有2个不同的官方TPL数据流nuget包。我很困惑选择我应该使用哪个。据我了解,System.Threading.Tasks.Dataflow版本比其他版本稍新,而且System.Threading.Tasks.Dataflow似乎是针对最新版本的.net。谁能解释一下它们之间的区别? 最佳答案 Microsoft.Tpl.Dataflow最初作为.net4.5的一部分作为独立于BCL的组件发布-这里是blogpostannouncingthereleaseSystem.Threading.Tasks.Dataflow作为一个单独的

c# - System.Threading.ThreadPool.SetMaxThreads 的默认值

假设,我没有通过调用函数显式设置任何值: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轰炸

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# - 这是对 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# 3.0 : Need to return duplicates from a List<>

我在C#中有一个对象列表,我需要一种方法来返回那些在列表中被认为是重复的对象。我不需要Distinct结果集,我需要一个我将从存储库中删除的项目的列表。为了这个例子,假设我有一个“汽车”类型的列表,我需要知道这些汽车中有哪些与列表中的其他汽车颜色相同。以下是列表中的汽车及其颜色属性:Car1.Color=Red;Car2.Color=Blue;Car3.Color=Green;Car4.Color=Red;Car5.Color=Red;对于这个例子,我需要结果(IEnumerable、List或其他)来包含Car4和Car5,因为我想从我的存储库或数据库中删除它们,这样我的存储库中每种

c# - Windows 服务 : OnStart loop - do I need to delegate?

我有一个Windows服务,它每n秒扫描一次文件夹以查找更改。尝试启动时出现“服务未及时响应启动命令”。我在OnStart中设置了一个循环,如下所示:publicvoidOnStart(string[]args){while(!_shouldExit){//DoStuff//RepeatThread.Sleep(_scanIntervalMillis);}}这是导致错误的原因吗?我应该委托(delegate)这个方法吗? 最佳答案 OnStart应该只开始工作;它不负责这样做。这通常意味着产生一个新线程来完成实际工作。预计OnSta

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,它可以正常工作。 最佳答案