C# 线程同步Vs任务同步Vs ConcurrentDictionary(无需同步),选择哪一个

C# 线程同步Vs任务同步Vs ConcurrentDictionary(无需同步),选择哪一个,c#,concurrency,thread-safety,task,async-await,C#,Concurrency,Thread Safety,Task,Async Await,如果在我们的程序中使用线程访问共享集合,那么我们应该使用互斥、监视器或Sempahore等确保线程安全 但是,如果我们不使用线程,而是使用任务,然后多个任务试图访问公共共享集合,那么我们还应该通过一些方法确保安全 但是,如果我们使用一些现成的线程安全集合,比如ConcurrentDictionary,那么就不需要确保锁定和线程任务安全,因为它已经在框架级别处理过了 因此,基本上我想知道,如果我们在并发消费环境中使用共享资源,可以使用哪种方法。总体而言,除非您有非常具体的性能要求,否则请使用最简单

如果在我们的程序中使用线程访问共享集合,那么我们应该使用互斥、监视器或Sempahore等确保线程安全

但是,如果我们不使用线程,而是使用任务,然后多个任务试图访问公共共享集合,那么我们还应该通过一些方法确保安全 但是,如果我们使用一些现成的线程安全集合,比如ConcurrentDictionary,那么就不需要确保锁定和线程任务安全,因为它已经在框架级别处理过了


因此,基本上我想知道,如果我们在并发消费环境中使用共享资源,可以使用哪种方法。

总体而言,除非您有非常具体的性能要求,否则请使用最简单的解决方案。也就是说,ConcurrentDictionary。由于同步逻辑是内置的,你几乎可以肯定没有人会搞砸“手动”任务和线程同步有时非常棘手。

它们都是解决不同问题的好方法。如果你能准确地告诉我们你想做什么,共享什么资源,需要什么样的访问,那么我们就可以告诉你哪种可能适合你的解决方案。

如果你想详细说明,那么我将解释一些工作流程,比如,有一个测验列表,一个班级的许多学生都可以访问,虽然可以同时由教员检查和评论,并由测验创建者(管理员)编辑提交,但假设A级测验正在运行,在创建B类测验等活动的同时,班上的学生人数不可能达到90人左右,使用同一个集合的客户机-服务器请求-响应场景非常多(如果您唯一的并发问题都是访问单个对象,那么您应该只使该对象线程安全,即使用
ConcurrentDictionary
)。