草庐IT

通信安全

全部标签

c# - C# 枚举类型安全吗?

C#枚举类型安全吗?如果不是,会有什么影响? 最佳答案 给出一个稍微不同的答案......虽然从转换的角度来看这些值是类型安全的,但一旦它们被转换它们仍然没有被检查-即enumFoo{A=1,B=2,C=3}staticvoidMain(){Foofoo=(Foo)500;//worksfineConsole.WriteLine(foo);//alsofine-shows500}因此,您应该注意检查值-例如default在switch抛出异常。您还可以通过以下方式检查(对于非[Flags]值):boolisValid=Enum.Is

c# - 将安全的 SQL 语句创建为字符串

我正在使用C#和.NET3.5。我需要生成并存储一些稍后将在远程服务器上执行的T-SQL插入语句。例如,我有一个员工数组:newEmployee[]{newEmployee{ID=5,Name="FrankGrimes"},newEmployee{ID=6,Name="TimO'Reilly"}}我需要得到一个字符串数组,如下所示:"INSERTINTOEmployees(id,name)VALUES(5,'FrankGrimes')","INSERTINTOEmployees(id,name)VALUES(6,'TimO''Reilly')"我正在查看一些使用String.Forma

c# - 线程,两个线程之间的通信c#

我想知道在两个线程之间实现通信的最佳方式是什么。我有一个生成随机数的线程(类Sender),现在我想要另一个线程(类Receiver)来接收生成的随机数。这是发件人:publicclassSender{publicintGenerateNumber(){//somecodereturnrandomNumber;}}当然在Main函数中我将启动这些线程:staticvoidMain(string[]args){Sender_sender=newSender();Threadthread1=newThread(newThreadStart(_sender.GenerateNumber));

c# - 如何轻松使这个计数器属性线程安全?

我在只有计数器的类中有属性定义,这必须是线程安全的,这不是因为get和set不在同一个锁中,如何做到这一点?privateint_DoneCounter;publicintDoneCounter{get{return_DoneCounter;}set{lock(sync){_DoneCounter=value;}}} 最佳答案 如果您希望以保证DoneCounter=DoneCounter+1不受竞争条件影响的方式实现属性,则不能在属性的实现中完成。该操作不是原子操作,它实际上是三个不同的步骤:检索DoneCounter的值。加1将

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#:这个字段赋值安全吗?

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

在Angular 2中,两个组件如何通信?

我写了两个组成部分,如下:dynselectioncomponent.ts(通用选择标签,因为选择标签不支持多选的滤波器,因此此组件使用ng2-selet).user-list.component.ts(此组件使用DynelectionComponent对应于HTML模板,并为DynselectionComponent提供了一个选项的集合)。dynselectioncomponent.tsimport{Component,OnInit,ViewEncapsulation,Input,SimpleChanges}from'@angular/core';@Component({selector:'

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

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

c# - 异步世界中的故障安全处置

在同步世界中,C#使一次性管理所有事物变得非常容易:using(IDisposablesomeDisposable=bla.bla()){//doourbidding}//don'tworrytoomuchaboutit但是,当我们使用异步时,我们不再享受usingblock带来的便利。我遇到的最好的策略之一是CCRiterator这允许我们使用异步代码“就好像它是同步的”。这意味着我们可以将usingblock保留在迭代器处理程序中,而不会陷入何时处理和捕获所有需要处理的情况的复杂决定中。但是,在许多情况下,调用CCR似乎有点矫枉过正,老实说,虽然我对CCR很满意,但对于外行来说,它