草庐IT

C++异常安全

全部标签

C#异常过滤器?

C#是否支持编译过滤器?过滤器是如何工作的或者它们有什么作用?像反射器反编译过滤器一样try{}catch(Exceptione)when(?){} 最佳答案 从C#6开始,您现在可以执行此操作。try{…}catch(MyExceptione)when(myfilter(e)){…}这与在catchblock中使用if语句不同,使用异常过滤器不会展开堆栈。 关于C#异常过滤器?,我们在StackOverflow上找到一个类似的问题: https://stac

C# RabbitMQ 客户端线程安全

ConnectionFactoryfactory=newConnectionFactory{HostName="localhost"};using(IConnectionconnection=factory.CreateConnection())using(IModelchannel=connection.CreateModel()){channel.QueueDeclare("hello",false,false,false,null);for(inti=0;i我有上面的代码,我对线程安全性很好奇。我不确定,但我想ConnectionFactory是线程安全的。但是IConnecti

c# - List<T>.Contains() 是线程安全调用 - C#

我的理解是,如果您在C#中使用泛型列表(List),那么它可以支持多个并发读取器,但只能支持一个写入器。当您将编写器引入混合时,您还必须提供同步结构以使操作线程安全。List.Contains是否被视为读取操作?换句话说,如果我调用这个方法,我是否需要担心写入者可能同时写入这个列表? 最佳答案 是的,你应该。基本上,如果列表可能同时用于写入,我会同步任何操作。一般来说,我发现集合分为两类-一种是创建、初始化然后再也不会更改(线程安全),另一种是随着时间的推移而发生变化(非线程安全,所有访问都锁定)。

c# - 为什么 FakeItEasy 抛出这个异常,为什么使方法成为虚拟方法来修复它?

我有一个测试(代码在下面)来测试Method1调用Method2。我得到的异常是Thecurrentproxygeneratorcannotinterceptthespecifiedmethodforthefollowingreason:-Sealedmethodscannotbeintercepted.被测方法本身并未密封。但是,它确实依赖密封类(第三方类,我无法为其创建包装器以正确模拟它-另一个问题的另一个主题)。无论哪种方式,此时我都没有要求FakeItEasy模拟密封类。在调试我的测试时,当调用依赖项时,我可以清楚地看到正在生成一个真实的对象,而不是假的。然而,鉴于错误消息,我

c# - 在 C# 中,是否有任何我不应该使用的内置异常?

.NETFramework中是否定义了任何我不应该在我自己的代码中抛出的异常,或者这是不好的做法?我应该自己写吗? 最佳答案 您不应抛出任何因用户错误而由CLR自动抛出的异常。比如堆栈溢出异常空引用异常访问冲突异常等...原因是这样做会给调用您的API的人造成困惑。用户应该能够区分API主动抛出的异常和非主动抛出的异常(由CLR抛出)。原因是主动抛出的异常通常表示API中的已知状态。如果我调用一个API并且它抛出一个ArgumentException,我有一个合理的期望,即给定的对象处于良好状态。它认识到潜在的不良情况并积极应对。另

c# - 如何在循环中处理异常并不断迭代?

我需要一个for循环来完成它的所有迭代,即使在任何一个迭代中有任何异常也是如此。 最佳答案 for(...){try{//Dostuff}catch(Exceptionex){//Handle(orignore)theexception}} 关于c#-如何在循环中处理异常并不断迭代?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/564229/

C#:这个字段赋值安全吗?

在这段代码中:classClassWithConstants{privateconststringConstantA="Something";privateconststringConstantB=ConstantA+"Else";...}是否存在以ConstantB=="Else"结束的风险?还是线性分配? 最佳答案 你总会得到“SomethingElse”。这是因为ConstantB依赖于ConstantA。你甚至可以换行,你会得到相同的结果。编译器知道ConstantB依赖于ConstantA并会相应地处理它,即使您将它写在分

c# - 我需要在 C# .Net 中创建一个线程安全的静态变量

好吧,它比问题复杂一点。classA{staticintneedsToBeThreadSafe=0;publicstaticvoidM1(){needsToBeThreadSafe=RandomNumber();}publicstaticvoidM2(){print(needsToBeThreadSafe);}}现在我要求在M1()和M2()之间调用“needsToBeThreadSafe”保持线程安全。 最佳答案 怎么样:publicstaticvoidM1(){Interlocked.Exchange(refneedsToBeT

c# - 为什么连续抛出2个异常不会产生无法访问的代码警告?

为什么下面的代码行没有产生编译器警告?voidMain(){thrownewException();thrownewException();}在我看来,编译器应该会通知您无法到达第二个抛出异常。 最佳答案 这显然是一个编译器错误,它是在C#3.0中引入的——就在我大量重构可达性检查器的时候。这可能是我的错,抱歉。这个错误是完全良性的;基本上,我们只是忘记了警告记者中的一个案例。我们正确地生成了可达性信息;正如其他人指出的那样,我们在代码生成之前正确地删除了无法访问的代码。这个错误只不过是警告生成器中的一个缺失案例。我们有一些棘手的代

c# - 如何从抛出异常的方法中通过 out/ref 参数获取值?

此代码输出“输出值”。classP{publicstaticvoidMain(){stringarg=null;try{Method(outarg);}catch{}Console.WriteLine(arg);}publicstaticvoidMethod(outstringarg){arg="outvalue";thrownewException();}}但是这个没有。classP{publicstaticvoidMain(){object[]args=newobject[1];MethodInfomi=typeof(P).GetMethod("Method");try{mi.In