Working Asynchronously

The RavenDB client API supports executing the common operations asynchronously, so lengthy operations don't have to be blocking. This is also how the RavenDB Silverlight client is working.

The TPL support is using System.Threading.Tasks, a good intro to which can be found here.

var entity = new Company {Name = "Async Company #2", Id = "companies/2"};
using (var session = documentStore.OpenAsyncSession())
{
	var company = await session.LoadAsync<Company>(1); // loading an entity asynchronously

	await session.StoreAsync(entity); // in-memory operations are committed asynchronously when calling SaveChangesAsync
	await session.SaveChangesAsync(); // returns a task that completes asynchronously

	var query = session.Query<Company>()
	                   .Where(x => x.Name == "Async Company #1")
	                   .ToListAsync(); // returns a task that will execute the query
}