在While循环中继续执行任务

时间:2018-02-22 15:57:58

标签: c# .net

我试图将数据从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;
    }
}

1 个答案:

答案 0 :(得分:0)

我个人会使用Task.Run();并保存返回的任务对象。然后,您可以在下一个循环中等待它,然后再继续