C# MongoDB FindAsync从未在等待时返回

C# MongoDB FindAsync从未在等待时返回,c#,wpf,mongodb,mongodb-.net-driver,C#,Wpf,Mongodb,Mongodb .net Driver,我已经查看了所有处理FindAsync的类似线程,它们在Wait上不返回,但没有一个线程帮助我解决了问题,因此我再次在此提问 我在一个WPF应用程序(.Net Framework 4.7.2)中,试图使用MongoDB的C#驱动程序(最新版本2.9)使用FindAsync(filter)命令查找集合中的单个项(集合中只有两个项) 使用synchronousFind(filter).SingleOrDefault()函数可以很好地工作(我对名称字段有一个简单的FilterDefinition),同

我已经查看了所有处理FindAsync的类似线程,它们在Wait上不返回,但没有一个线程帮助我解决了问题,因此我再次在此提问

我在一个WPF应用程序(.Net Framework 4.7.2)中,试图使用MongoDB的C#驱动程序(最新版本2.9)使用
FindAsync(filter)
命令查找集合中的单个项(集合中只有两个项)

使用synchronous
Find(filter).SingleOrDefault()
函数可以很好地工作(我对名称字段有一个简单的FilterDefinition),同时调用驱动程序的其他(创建)异步函数(如InsertOneAsync)也可以很好地工作

我还通过
MongoClientSettings.ClusterConfiguration
SingleEventSubscribers
(以及其他命令)订阅连接到客户端调用。控制台输出清楚地告诉我FindAsync操作成功。它会找到正确的单个集合项

这是我的异步函数(在我的泛型类中):


我调试了我的应用程序,但它从未从FindAsync调用返回,我也不知道为什么。

构造函数不应该接触数据库或进行任何危险的操作。提示:任何时候在异步代码中使用
.Result
,都可能是做错了。这可能会导致死锁。我很确定.Result会阻止当前上下文,不允许调用返回,这将导致异步死锁,因为您在WPF应用程序中。是的,这里的人是对的。你正在做的是导致死锁的syncoverasync(更多信息,请搜索这个术语)。使用
等待
而不是
。结果
。如果由于某种原因无法使用
ConfigureAwait(false)
@Artur,则不能在构造函数中使用
await
。最终,这段代码不属于那里。您可以生成一个新任务来执行Get调用,这样您就可以等待它是否必须从构造函数启动
        public async Task<T> GetAsync(FilterDefinition<T> filter)
        {
            var cursor = await Collection.FindAsync(filter);
            return await cursor.SingleOrDefaultAsync().ConfigureAwait(false);
        }
        item = CollectionClass.GetAsync(nameFilter).Result;