Couchbase 批量加载错误与 upsert() (.NET SDK 2.0)

Couchbase Bulk loading error with upsert() (.NET SDK 2.0)

我在使用 upsert 函数插入批量数据时遇到错误,但不知道如何修复它。有人知道这里出了什么问题吗?该程序本质上是从 SQL 服务器数据库中获取数据并加载到我们在 Amazon 实例上的 Couchbase 存储桶中。它最初确实开始加载,但在大约 10 次左右更新后它崩溃了。

我的错误如下: 集合被修改;枚举操作可能无法执行。 以下是错误的屏幕截图(抱歉,该错误仅在我的其他 Amazon 服务器实例上复制,而不是在本地复制): http://imgur.com/a/ZJB0c

这是调用 upsert 方法的函数。这被调用了多次,因为我一次只检索部分数据,因为 SQL table 非常大。

 private void receiptItemInsert(double i, int k) {
        const int BATCH_SIZE = 10000;
        APSSEntities entity = new APSSEntities();
        var data = entity.ReceiptItems.OrderBy(x => x.ID).Skip((int)i * BATCH_SIZE).Take(BATCH_SIZE);
        var joinedData = from d in data
                            join s in entity.Stocks
                            on new { stkId = (Guid)d.StockID } equals new { stkId = s.ID } into ps
                            from s in ps.DefaultIfEmpty()
                            select new { d, s };
        var stuff = joinedData.ToList();
        var dict = new Dictionary<string, dynamic>();

        foreach (var ri in stuff)
        {
            Stock stock = new Stock();
            var ritem = new CouchModel.ReceiptItem(ri.d, k, ri.s);
            string key = "receipt_item:" + k.ToString() + ":" + ri.d.ID.ToString();
            dict.Add(key, ritem);
        }
        entity.Dispose();
        using (var cluster = new Cluster(config))
        {
            //open buckets here
            using (var bucket = cluster.OpenBucket("myhoney"))
            {
                bucket.Upsert(dict); #CRASHES HERE
            }
        }
    }

Couchbase Forums 中所述,这可能是 SDK 中的错误。

初始化couchbase集群的内部映射时,SDK会构建一个List个端点。如果两个以上的线程(如批量更新插入期间的情况)同时触发此代码,一个人可能会看到 List 的一个实例被另一个填充(因为锁定是在调用 List.Any(), 修改列表可能会崩溃).