草庐IT

@Async失效情况

全部标签

c# - 如何避免使用 async void 事件处理程序重入?

在WPF应用程序中,我有一个通过网络接收消息的类。每当所述类的对象收到一条完整的消息时,就会引发一个事件。在应用程序的主窗口中,我有一个事件处理程序订阅了该事件。保证在应用程序的GUI线程上调用事件处理程序。无论何时调用事件处理程序,都需要将消息的内容应用于模型。这样做可能会非常昂贵(在当前硬件上>200ms)。这就是使用Task.Run将应用消息卸载到线程池的原因。现在,可以非常连续地接收消息,因此可以在仍在处理之前的更改时调用事件处理程序。确保一次只应用一条消息的最简单方法是什么?到目前为止,我已经得出以下结论:usingSystem;usingSystem.Threading.T

c# - 使用 async/await 限制信号量线程

我最近遇到了一个针对异步/等待调用限制线程的示例。在我的机器上分析和运行代码后,我想出了一种稍微不同的方法来做同样的事情。我不确定的是引擎盖下发生的事情是否几乎相同,或者是否有任何值得注意的细微差别?这是基于原始示例的代码:privatereadonlySemaphoreSlim_semaphore=newSemaphoreSlim(5);publicasyncTaskCallThrottledTasks(){vartasks=newList();for(intcount=1;count{try{intresult=awaitLongRunningTask();Debug.Print(

c# - 在什么情况下我需要 Entity Framework 中的外键和导航属性

我的订单类有:publicintCustomerId{get;set;}publicCustomerCustomer{get;set;}我真的需要这两个属性才能使关系有效吗?我没有使用断开连接的实体,我使用的是代码优先方法。 最佳答案 根据JuliaLerman的书:ProgrammingEntityFramework:DbContext,区别在于更新导航属性的难度。在第85页,她建议“如果您可以做一件事来让您在N层场景中的生活更轻松,那就是为您的模型中的关系公开外键属性。”本书包含两种场景的示例。原因是包含一个外键属性告诉Enti

c# - 如何在不装箱的情况下比较 System.Enum 和枚举(实现)?

如何在不装箱的情况下将System.Enum与enum进行比较?例如,如何在不装箱enum的情况下使以下代码工作?enumColor{Red,Green,Blue}...System.EnummyEnum=GetEnum();//ReturnsaSystem.Enum.//MaybeaColor,maybesomeotherenumtype....if(myEnum==Color.Red)//ERROR!{DoSomething();}具体而言,此处的目的不是比较基础值。在这种情况下,基本值(value)并不重要。相反,如果两个枚举具有相同的基础值,如果它们是两种不同类型的枚举,则不应

c# - 在这种情况下,我们是否应该开发自定义成员资格提供程序?

总结长话短说,我们的任务是分解一个相当老旧且臃肿的asp.net应用程序的身份验证和授权部分,该应用程序以前所有这些组件都是从头开始编写的。由于我们的应用程序不是典型的应用程序,而且我们都没有使用asp.net内置成员资格提供程序的经验,我们不确定是否应该再次推出我们自己的身份验证和授权,或者我们是否应该尝试在asp.net成员(member)提供商的心态并开发我们自己的成员(member)提供商。我们的应用我们有一个相当古老的ASP.NET应用程序,它安装在客户位置,为LAN上的客户提供服务。管理员创建用户(用户无需注册),根据安装情况,我们可能会将软件与LDAP集成。目前,LDAP

c# - 使用 .NET 4.5 async 将 Azure blob 异步下载到字符串,等待

我正在尝试使用.NET4.5async&await实现完全异步blob下载。假设整个blob可以一次放入内存中,并且我们希望将其保存在string中。代码:publicasyncTaskDownloadTextAsync(ICloudBlobblob){using(StreammemoryStream=newMemoryStream()){IAsyncResultasyncResult=blob.BeginDownloadToStream(memoryStream,null,null);awaitTask.Factory.FromAsync(asyncResult,(r)=>{blob

c# - 如何强制 MSBuild 在不重新编译的情况下运行代码分析

默认情况下,代码分析仅针对已编译的项目进行。因此,当我从命令行运行MSBuild时,它仅在第一次运行代码分析。在后续调用中,将跳过代码分析。背景:我想评估CA规则,看看在启用规则时我们的代码中会有多少警告。为此,我不想重新编译所有内容——这需要一些时间——只是重新运行代码分析。你如何才能做到这一点?我正在使用VisualStudio2013和MSBuild12.0。即使明确打开代码分析也无济于事:msbuildDesktopBuild.proj/p:RunCodeAnalysis=true 最佳答案 好像是del/s*.lastco

c# - 在什么情况下 Process.Start() 方法会返回 false?

来自MSDN:Thereturnvaluetrueindicatesthatanewprocessresourcewasstarted.IftheprocessresourcespecifiedbytheFileNamememberoftheStartInfopropertyisalreadyrunningonthecomputer,noadditionalprocessresourceisstarted.Instead,therunningprocessresourceisreusedandfalseisreturned.尝试这样的事情:varinfo=newProcessStart

c# - 获取 CPU 和 RAM 使用情况

我需要在进程执行期间获取ram内存和CPU使用率(该进程有时会运行30分钟以上)。我能够获得空闲RAM,但与任务管理器中的值相比,CPU使用率不正确。难道我做错了什么?这是我的代码:classProgram{staticListAvailableCPU=newList();staticListAvailableRAM=newList();protectedstaticPerformanceCountercpuCounter;protectedstaticPerformanceCounterramCounter;staticvoidMain(string[]args){cpuCounte

c# - 为什么在这种情况下我会打印出 System.char[]?

我想弄清楚我在这里做错了什么,但我似乎做不到。我有这种方法,它接受一个字符串并将其反转。但是,当我从调用方方法中打印出反转的字符串时,我只得到“System.Char[]”而不是实际的反转字符串。staticstringreverseString(stringtoReverse){char[]reversedString=toReverse.ToCharArray();Array.Reverse(reversedString);returnreversedString.ToString();} 最佳答案 在.NET中对T数组调用To