草庐IT

thread_func

全部标签

c# - 将 void 返回类型与 new Func<T, TResult> 一起使用

我在调用此示例函数的代码中使用匿名委托(delegate):publicstaticintTestFunction(inta,intb){returna+b;}代表看起来像这样:vardel=newFunc(TestFunction);我的问题是:如何为TResult指定一个void返回类型?以下不起作用:publicstaticvoidOtherFunction(inta,stringb){...}vardel=newFunc(OtherFunction); 最佳答案 如果没有返回类型,你想要Action:vardel=newAc

c# - 为什么调用不明确? 'Task.Run(Action)' 和 'Task.Run(Func<Task>)'

考虑以下代码:publicvoidCacheData(){Task.Run((Action)CacheExternalData);Task.Run(()=>CacheExternalData());Task.Run(CacheExternalDataTask);Task.Run(CacheExternalData);}publicTaskCacheExternalDataTask(){//LongrunningcodereturnTask.FromResult("Data");}publicvoidCacheExternalData(){//Longrunningcode}为什么Tas

c# - System.Threading.Timer 的可扩展性如何?

我正在编写一个需要使用Timer的应用程序,但其中可能有很多。System.Threading.Timer类的可扩展性如何?文档只是说它是“轻量级”,但没有进一步解释。这些计时器是否被吸收到代表Timer处理所有回调的单个线程(或非常小的线程池)中,或者是否每个Timer都有自己的线程?我想用另一种方式来改写这个问题:System.Threading.Timer是如何实现的? 最佳答案 我这样说是为了回答很多问题:不要忘记框架的(托管)源代码是可用的。您可以使用此工具来获取所有信息:http://www.codeplex.com/N

c# - BackgroundWorker 和 System.Threading.Thread 之间的区别

使用BackgroundWorker创建线程和使用System.Threading.Thread创建线程有什么区别? 最佳答案 BackgroundWorker类基本上抽象了Thread创建和监控过程,并为您提供一个事件驱动的API来报告操作的进度(ProgressChanged)并确定您的操作何时完成(RunWorkerCompleted)...它最常见的用途之一是在长时间运行的进程在后台执行时保持WindowsGUI响应。所以基本上,它只是System.Threading.Thread的包装器,旨在使后台线程更简单一些(顾名思义

c# - 使用 Moq 模拟 Func<> 构造函数参数并验证它被调用了两次

从这篇文章(HowtomoqaFunc)中提取问题并根据答案不正确进行修改。publicclassFooBar{privateFunc__fooBarProxyFactory;publicFooBar(FuncfooBarProxyFactory){_fooBarProxyFactory=fooBarProxyFactory;}publicvoidProcess(){_fooBarProxyFactory();_fooBarProxyFactory();}}我需要模拟一个作为构造函数参数传递的Func,断言func被调用了两次。当试图模拟函数时varfuncMock=newMock>(

c# - 使用反射创建一个 Expression<Func<,>>

我正在使用Moq创建数据集的模拟。我创建了一个小助手类,它允许我拥有一个内存存储而不是一个使单元测试变得轻而易举的数据库。这样我就可以在我的模拟数据集中添加和删除项目,这让我可以测试我的插入和删除服务调用。在模拟的设置过程中,我有一行如下所示this.Setup(i=>i.AcademicCycles).Returns(mockStore.GetList());我的mock有很多属性,所以我想使用反射来执行这个设置步骤。我已经设法Returns通过反射工作的过程的一部分,但我坚持使用lambda方法到Setup.Setup需要一个Expression>>对应于i=>i.Academic

c# - Thread.VolatileRead()与Volatile.Read()

在大多数情况下,我们被告知比Volatile.Read更喜欢Thread.VolatileRead,这是因为后者散发出全围栏,而前者仅散发相关的半围栏(例如,获取围栏);效率更高。但是,据我所知,由于Thread.VolatileRead的实现,Volatile.Read实际上提供了Thread.VolatileRead不提供的某些功能:publicstaticintVolatileRead(refintaddress){intnum=address;Thread.MemoryBarrier();returnnum;}由于实现的第二行有完整的内存屏障,我相信VolatileRead实际

c# - Thread.Sleep 少于 1 毫秒

我想在不到1毫秒的时间内调用线程休眠。我读到thread.Sleep和Windows操作系统都不支持它。解决方案是什么?对于所有想知道我为什么需要这个的人:我正在进行压力测试,想知道我的模块每秒可以处理多少条消息。所以我的代码是://SettherelativepartofSecondhatwillbeallocatedforeachmessage//Forexample:5messages-everymessagewillget200milisecondsvarquantum=1000/numOfMessages;for(vari=0;i我很乐意听取您的意见。

c# - 使用 SocketAsyncEventArgs 时是否可以删除 ExecutionContext 和 Thread 分配?

如果您分析一个使用SocketAsyncEventArgs的简单客户端应用程序,您会注意到Thread和ExecutionContext分配。分配的来源是SocketAsyncEventArgs.StartOperationCommon,它使用ExecutionContext.CreateCopy()创建ExecutionContext的副本。ExecutionContext.SuppressFlow似乎是抑制此分配的好方法。但是,此方法本身会在新线程中运行时生成分配。如何避免这些分配? 最佳答案 SocketAsyncEventA

c# - 如何动态创建 Expression<Func<MyClass, bool>> 谓词?

我将如何使用表达式树来动态创建一个看起来像...的谓词(p.Length==5)&&(p.SomeOtherProperty=="hello")这样我就可以像这样将谓词插入到lambda表达式中...q.Where(myDynamicExpression)...我只需要指出正确的方向。更新:抱歉,伙计们,我遗漏了一个事实,即我希望谓词具有上述多个条件。抱歉造成混淆。 最佳答案 原创像这样:varparam=Expression.Parameter(typeof(string),"p");varlen=Expression.Prope