C# MongoDB CountAsync和游标在具有新驱动程序的Windows服务中不工作

C# MongoDB CountAsync和游标在具有新驱动程序的Windows服务中不工作,c#,windows,mongodb,service,C#,Windows,Mongodb,Service,我有一个Windows服务,它从SQL Server读取数据并将其写入MongoDB 我正在尝试将此服务适应新的MongoDB驱动程序(使用2.0.1版本),但我面临一些问题 我有这个: protected void OnStart(string[] args) { threadExternalPage = new Thread(new ThreadStart(FacadeFactory.GetLivePrice.UpdateExternalPage)); 此代码调用

我有一个Windows服务,它从SQL Server读取数据并将其写入MongoDB

我正在尝试将此服务适应新的MongoDB驱动程序(使用2.0.1版本),但我面临一些问题

我有这个:

 protected void OnStart(string[] args)
    {
        threadExternalPage = new Thread(new ThreadStart(FacadeFactory.GetLivePrice.UpdateExternalPage));
此代码调用此方法

 public async void UpdateExternalPage()
    {
        while (true)
        {
            MongoUpdateProductBO mongo = new MongoUpdateProductBO();
            await mongo.UpdateExternalPage();
        }
    }
现在的问题是:每次我在mongo.UpdateExternalPage()上调用这一行

该方法在不处理下一条指令的情况下退出

如果我执行这一行,也会发生同样的情况:

using (var cursor = await collection.Find(filter).ToCursorAsync())

但是如果我使用Windows窗体应用程序做同样的事情,那就没有问题了!但是我需要这个代码在Windows服务中工作。有人知道我的实现是否错误,或者使用新的MongoDB驱动程序是否有一些限制吗?

这个问题与同步上下文和异步/避免方法的问题有关。
您有运行长时间运行任务的地方,应替换此代码。
由斯科特·汉斯曼描述

您可以快速检查并至少确定下一步的问题来源:

protected void OnStart(string[] args)
{
     ThreadPool.QueueUserWorkItem(async x => await UpdateExternalPage();
}

并将avoid替换为Task-
public async Task UpdateExternalPage()

我将代码更改为以下内容:

 var cursor = collection.Find(filter).ToCursorAsync();
        cursor.Wait();

        using (cursor.Result)
        {
            while (cursor.Result.MoveNextAsync().Result)
            {
这一切都如期而至

同样,当我将计数更改为:

        var temp = collection.CountAsync(new BsonDocument());
        temp.Wait();
        var count = temp.Result;
        var temp = collection.CountAsync(new BsonDocument());
        temp.Wait();
        var count = temp.Result;