2013-01-18 34 views
4

我使用ASP.net Web API和MongoDB创建一个简单的服务。Mongodb c#库异步

我使用官方的Mongodb C#库。

我如何使它异步?我认为官方的Mongodb C#库不支持异步。

我可以只使控制器异步,但不是选择语句?

控制器:

从mongodb的数据库
public IQueryable<Test> GetAllPlaces() 
{ 
    return _test.GetAllPlaces().AsQueryable(); 
} 

选择:

public IEnumerable<Test> GetAllPlaces() 
{ 
    return _test.FindAll(); 
} 

谢谢。

+0

最新的2.0版本完全支持异步操作,看看。 – XtremeBytes

回答

3

虽然你可以使它异步,这样做不会提供任何实际的性能收益,因为底层库不是异步。还有很多,它被描述得很好here。一般的答案是“不”。

4

位老问题,而是一个完整的异步MongoDB的驱动程序,C#是即将在2013年11月:

https://jira.mongodb.org/browse/CSHARP-138

编辑 - 正如尤金说,司机仍处于开发阶段。有在Github上一些实验项目,在我们等待官方的一个

https://github.com/rstam/mongo-async-csharp-driver https://github.com/andrebires/mongo-csharp-driver

02-APR-2015更新:

2.0是出!:Nuget Link 但要知道,异步GridFS尚不支持,你需要继续使用legacy package来处理它,直到他们释放它,可能在version 2.1

(谢谢paqogomez的抬头)

+0

异步支持的更新时间表为** 2014年第一季度**: 来自Craig Wilson评论: ...我们还没有ETA,但它很可能是2014年第一季度。此外,异步将会仅支持.NET 4.5。 –

+0

[2.0 is now out](http://api.mongodb.org/csharp/2.0/html/R_Project_CSharpDriverDocs.htm) – paqogomez

1

在这里跳过一个旧的线程,但在C#中的FYI可以让您的查询以SafeMode.False作为参数运行(我相信它实际上是关闭的),它将在消防和忘记的方式。

我的大部分我的东西代码如下所示:

IMongoQuery query = Query.EQ("_id", Path); 
IMongoUpdate update = Update.Set("Key", "value"); 
SafeModeResult oCmd = mCollection.Update(query, update, SafeMode.True); 

,因为我需要安全模式。但是,如果将其设置为false或将该参数设置为out,则会发生火灾并遗忘功能。