C#Mongo FirstOrDefaultAsync挂起

时间:2015-04-15 17:31:24

标签: c# .net mongodb async-await mongodb-.net-driver

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

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

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

db.Customers.find({"Name" : /test$/i})

1 个答案:

答案 0 :(得分:7)

有两种解决方案:

  1. 在最后添加ConfigureAwait(false)

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

    public Task<T> GetFirst(FilterDefinition<T> query)
    {
        return GetCollection.Find(query).FirstOrDefaultAsync();
    }