C# 正在尝试对mongodb中的集合进行并发更新(AddToSet),但其工作不正常

C# 正在尝试对mongodb中的集合进行并发更新(AddToSet),但其工作不正常,c#,mongodb,asp.net-core,.net-core,C#,Mongodb,Asp.net Core,.net Core,我有FileAggregateReport类: public class FileAggregateReport { public Guid FileId { get; set; } public Guid CorrelationId { get; set; } public int NumberOfSupportedEngines { get; set; } public int EnginesCompleted { get; set;

我有FileAggregateReport类:

 public class FileAggregateReport
{        
    public Guid FileId { get; set; }

    public Guid CorrelationId { get; set; }

    public int NumberOfSupportedEngines { get; set; }

    public int EnginesCompleted { get; set; }

    public string SHA256 { get; set; }

    public DateTime ScanDate { get; set; }

    public List<EngineReport> EngineReports { get; set; }        
}
当我做这样的测试时:

Guid cor = Guid.NewGuid();
Guid fileID = Guid.NewGuid();
EngineReport report = new EngineReport()
{
   FileId = fileID
};
_fileResultRepository.InsertNewEngineReport(cor, fileID, report, "dfsdfsdf", 15);

Task[] tasks = new Task[5];
for (int i = 0; i < 5; i++)
  {
      Task task = Task.Run(() => 
     _fileResultRepository.InsertNewEngineReport(cor, fileID, new EngineReport()
      {
        FileId = fileID,
        EngineType = EngineType.Clamav,
        MaliciousScore = 70,
        ScanDate = DateTime.Now,
        ShortSummary = "ATD"
      }, "dfsdfsdf", 5));
      tasks[i]=task;
  }                                                       
 Task.WaitAll(tasks);
Guid cor=Guid.NewGuid();
Guid fileID=Guid.NewGuid();
EngineReport报告=新建EngineReport()
{
FileId=FileId
};
_插入新引擎报告(cor,fileID,报告,“dfsdf”,15);
任务[]任务=新任务[5];
对于(int i=0;i<5;i++)
{
任务=任务。运行(()=>
_InsertNewEngineReport(cor,fileID,newEngineReport())
{
FileId=FileId,
EngineType=EngineType.Clamav,
MaliciousScore=70,
ScanDate=日期时间。现在,
ShortSummary=“ATD”
}"dfsdf",5),;
任务[i]=任务;
}                                                       
Task.WaitAll(任务);
但是在我的测试结果中,我在
EnginesReport
中只有3个元素,它必须是6。
有时我会得到E11000重复键错误集合:FileResultAggregationRepository.FileAggregateReportIndex:_id_dup key:{:BinData(3,2A03C999127FDF4AAF293C5C086BEC66),但我无法重现此错误。

我从mongodb文档中看到了
AddToSet
=>$addToSet运算符向数组中添加一个值,除非该值已经存在,在这种情况下,$addToSet对该数组不做任何操作


我为
FileAggregateReport
添加了新的
Id
,因为
FileId
与所有
EngineReports
相同,在我的测试中更改后,我得到了6个
EngineReports

感谢链接,我知道这是已知的问题,但我在运行测试时没有得到任何异常
Guid cor = Guid.NewGuid();
Guid fileID = Guid.NewGuid();
EngineReport report = new EngineReport()
{
   FileId = fileID
};
_fileResultRepository.InsertNewEngineReport(cor, fileID, report, "dfsdfsdf", 15);

Task[] tasks = new Task[5];
for (int i = 0; i < 5; i++)
  {
      Task task = Task.Run(() => 
     _fileResultRepository.InsertNewEngineReport(cor, fileID, new EngineReport()
      {
        FileId = fileID,
        EngineType = EngineType.Clamav,
        MaliciousScore = 70,
        ScanDate = DateTime.Now,
        ShortSummary = "ATD"
      }, "dfsdfsdf", 5));
      tasks[i]=task;
  }                                                       
 Task.WaitAll(tasks);