草庐IT

thread_func

全部标签

c# - Lock vs. ToArray for thread safe foreach access of List collection

我有一个List集合,我想在多线程应用程序中对其进行迭代。我每次迭代它时都需要保护它,因为它可能会被更改,而且我不希望在执行foreach时出现“集合已修改”异常。正确的做法是什么?每次访问或循环时都使用锁。我非常害怕死锁。也许我只是对使用lock偏执,不应该。如果我走这条路以避免死锁,我需要知道什么?锁是否相当有效?每次执行foreach时,都使用List.ToArray()复制到一个数组。这会导致性能下降,但很容易做到。我担心内存抖动以及复制它的时间。只是显得过分。使用ToArray是线程安全的吗?不要使用foreach,而是使用for循环。每次执行此操作时我不需要进行长度检查以确

c# - 可移植类库中的 Thread.Sleep()

MSDN文档说Thread.Sleep()可以在可移植类库中使用。编译器另有说明。除了自旋循环,我还有哪些选择?Thread.CurrentThread.Join()也不存在。项目文件:DebugAnyCPU{C46B138E-CC30-4397-B326-8DD019E3874B}LibraryPropertiesx0xtest.AVRx0xtest.AVRv4.0Profile3512{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}truefullfalsebin\Debug\

c# - 有没有办法在 c# 中获取所有线程的堆栈跟踪,比如 java.lang.Thread.getAllStackTraces()?

在Java中,可以获得所有正在运行的线程的堆栈跟踪的快照。这是用java.lang.Thread.getAllStackTraces()完成的(它返回Map)。如何使用.net完成此操作? 最佳答案 所以我实际上只需要弄清楚如何做到这一点——还没有在生产中广泛使用这个解决方案,但是有一个相对较新的库,叫做ClrMd。http://blogs.msdn.com/b/dougste/archive/2013/05/04/clrmd-net-crash-dump-and-live-process-inspection.aspx使用它,我能

c# - Moq When(Func<bool>) 方法的使用

我找不到在Moq中使用When方法的示例When(Funccondition);该方法的目的/用途是什么?请提供一个代码示例,展示一个有用的场景。 最佳答案 “何时”让您可以选择对同一个模拟对象进行不同的设置,具体取决于您必须决定的内容。假设您想测试您编写的格式提供程序。如果程序(=测试)在早上运行,某个函数调用应该返回null;下午一定值。然后你可以使用“When”来编写那些条件设置。varmockedService=newMock();mockedService.When(()=>DateTime.Now.Hourx.GetFo

c# - 如何将 Func 放入 C# 属性(注释)中?

我有一个C#注释:[AttributeUsage(AttributeTargets.Method)]publicclassOperationInfo:System.Attribute{publicenumVisibilityType{GLOBAL,LOCAL,PRIVATE}publicVisibilityTypeVisibility{get;set;}publicstringTitle{get;set;}publicFunc,List>Func;publicOperationInfo(VisibilityTypevisibility,stringtitle,Func,List>fun

c# - 将异步 lambda 表达式转换为委托(delegate)类型 System.Func<T>?

我在具有此签名的可移植类库中有一个异步方法:privateasyncTask_Fetch(Uriuri)它获取一个资源,该资源被转换为具体类型T。我正在使用需要Func的第三方缓存库(Akavache)作为参数之一,并尝试以这种方式这样做:awaitthis.CacheProvider.GetOrCreateObject(key,async()=>await_Fetch(uri),cacheExpiry);这会导致错误:Cannotconvertasynclambdaexpressiontodelegatetype'System.Func'.Anasynclambdaexpressio

c# - Thread.Sleep 或 Thread.Yield

我有一个方法,它使用后台工作程序轮询DLL以获取如下所示的状态:vartimeout=DateTime.Now.AddSeconds(3);while(System.Status!=Status.Complete//ourstatusisnotcomplete&&DateTime.Now查看我的CPU%时,yield()和spinwait()导致我的应用在我的PC上使用率高达50%。使用Sleep(1),我的CPU%保持在6%。有人告诉我应该选择Thread.Yield(),但是CPU%的峰值让我很困扰。像这样的最佳做法是什么? 最佳答案

c# - 为什么从 Expression<Func<>> 创建的 Func<> 比直接声明的 Func<> 慢?

为什么是Func从Expression>创建通过.Compile()比仅使用Func慢得多直接声明?我刚从使用Func更改为直接声明为从Expression>创建的一个在我正在开发的应用程序中,我注意到性能下降了。我刚刚做了一个小测试,Func从表达式创建的时间“几乎”是Func的两倍直接声明。在我的机器上直接Func大约需要7.5秒,Expression>大约需要12.6秒。这里是我使用的测试代码(运行Net4.0)//DirectFunctest1=x=>newFoo(x*2);intcounter1=0;Stopwatchs1=newStopwatch();s1.Start();

c# - 如何设置属性选择器的值 Expression<Func<T,TResult>>

我需要使用模式工厂的想法将我的Person类实体中的实体属性地址与我的FactoryEntities类中的表达式linq相关联,看看这就是我拥有的并且我想做的:Addressaddress=newAddress();address.Country="Chile";address.City="Santiago";address.ZipCode="43532";//Factoryinstancecreationobject//ThisisideaPersonperson=newFactoryEntity().AssociateWithEntity(p=>p.Address,address)

c# - 是 Thread.Sleep(Timeout.Infinite);比 while(true){} 更有效?

我有一个控制台应用程序,我想在监听事件的同时一直保持打开状态。我已经测试了Thread.Sleep(Timeout.Infinite);和while(true){}并且都允许在保持控制台应用程序打开的同时引发事件。有没有我应该优先使用的?如果线程正在休眠,是否有任何我不应该做的事情,例如修改类范围内声明的静态集合? 最佳答案 我建议使用ManualResetEvent(或其他WaitHandle),并调用ManualResetEvent.WaitOne.这将具有与永远sleep类似的效果,除了它为您提供了一种干净的方式,可以在需要时