Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尽管使用concurrentbag,但仍能并发访问变量_C#_Concurrency_Parallel Processing - Fatal编程技术网

C# 尽管使用concurrentbag,但仍能并发访问变量

C# 尽管使用concurrentbag,但仍能并发访问变量,c#,concurrency,parallel-processing,C#,Concurrency,Parallel Processing,下面是我在生产环境中使用parallel.foreach和concurrent包的方法的代码片段 Parallel.ForEach(lstTasks, options, item => { Repository.AssignmentDTO.TaskAssignmentDTO tskVar; while (lstConcurrentObj.TryTake(out tskVar))

下面是我在生产环境中使用parallel.foreach和concurrent包的方法的代码片段

Parallel.ForEach(lstTasks, options, item =>
                {
                    Repository.AssignmentDTO.TaskAssignmentDTO tskVar;
                    while (lstConcurrentObj.TryTake(out tskVar))
                    {
                         finaltaskslist.Add(ProcessTaskAssgn(item, tskVar));    
                    }

                    //}
                });
FinalTaskList是一个列表,在方法ProcessTaskAssgn…中执行一些长操作后,我在其中添加对象

上面的lstccurrentobj是一个并发包,我在其中添加了几个具有相同值的初始化对象

然后使用此列表填充数据表

但是,当我查看datatable中的条目时,很明显条目重复或混合, 推断我的ProcessTaskAssgn方法不是真正的线程安全方法,并且并发操作给出了错误的结果。 我对concurrentbag的使用是否正确


导致问题的原因是多个线程同时获取相同的信息

LSConcurrentObj已经满了,对吗?ConcurrentBag适用于生产者-消费者场景,其中一个或多个线程正在读取数据,另一个线程正在向集合写入数据。在您的情况下,您只是以并行的方式阅读(消费)集合。您可以并行地读取它(例如,通过Parallel.ForEach)并正常地填充数据库