我试图将数据从SQL移动到MongoDB。问题与C#Async Await有关。我所做的是先收集2000个文档然后插入MongoDB。我正在等待我的插入电话。我想在这里做的不是等待我想继续收集下一个2000文档,但只在最后一次调用返回时才调用SaveToCollection方法。
int counter = 0, totalCounter = 0;
List<BsonDocument> documentList = new List<BsonDocument>();
while (rdr.Read())
{
Dictionary<string, object> obj = new Dictionary<string, object>();
for (int lp = 0; lp < rdr.FieldCount; lp++)
{
if (rdr.GetValue(lp) != DBNull.Value)
obj.Add(rdr.GetName(lp).ToLower(), rdr.GetValue(lp));
else
obj.Add(rdr.GetName(lp).ToLower(), "");
}
documentList.Add(new BsonDocument(obj));
counter++;
if (counter == 2000)
{
/* I dont want to wait here. Continue to get 2000 more documents but wait if previous call is not completed yet.*/
if (SaveToCollection(documentList, MongoCollectionName).GetAwaiter().GetResult())
{
totalCounter = totalCounter + counter;
}
documentList.Clear();
counter = 0;
}
}
答案 0 :(得分:0)
我个人会使用Task.Run()
;并保存返回的任务对象。然后,您可以在下一个循环中等待它,然后再继续