C#Mongo FirstOrDefaultAsync挂起

Cha*_*dit 3 .net c# mongodb async-await mongodb-.net-driver

使用2.0驱动程序,以下代码有时会挂起并永远不会返回.

public async Task<T> GetFirst(FilterDefinition<T> query)
{
    return await GetCollection.Find(query).FirstOrDefaultAsync();
}
Run Code Online (Sandbox Code Playgroud)

如果我首次亮相并在回程线上设置一个断点,一切都会恢复正常.在shell中运行的查询是这样的:

db.Customers.find({"Name" : /test$/i})
Run Code Online (Sandbox Code Playgroud)

Cra*_*son 7

有两种解决方案:

  1. 最后添加一个ConfigureAwait(false):

    return await GetCollection.Find(query).FirstOrDefaultAsync().ConfigureAwait(false);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 只需返回Task<T>,因为结果与FirstOrDefaultAsync()您想要返回的结果类型相同.

    public Task<T> GetFirst(FilterDefinition<T> query)
    {
        return GetCollection.Find(query).FirstOrDefaultAsync();
    }
    
    Run Code Online (Sandbox Code Playgroud)