Working with async/await |
Like SphinxQL, the fluent API has become fully asynchronous since V4 of SphinxConnector.NET.
using (IFulltextSession fulltextSession = fulltextStore.StartSession()) { var results = await fulltextSession.Query<Book>(). Match("crime"). ToListAsync(); }
Retrieving query metadata works the same with asynchronous queries as it does with synchronous queries:
using (IFulltextSession fulltextSession = fulltextStore.StartSession()) { var results = await fulltextSession.Query<Book>(). Metadata(out QueryMetadata metadata). Match("crime"). ToListAsync(); }
With the fluent API you don't have to await each method call before invoking another one, you may execute several async methods without awaiting them to achieve some parallelism:
using (IFulltextSession fulltextSession = fulltextStore.StartSession()) { var mainQuery = fulltextSession.Query<Book>(). Match(incomingSearchTerm). ToListAsync(); //Get suggestions in case the search yields no results //By not awaiting the main query both requests execute in parallel so that the suggestions will //most likely already be available when needed var suggestionQuery = fulltextSession.GetSuggestionsAsync<Book>(incomingSearchTerm"); await Task.WhenAll(mainQuery, suggestionQuery) //Do further processing }
using (IFulltextSession session = fulltextStore.StartSession()) { session.Save(new Book { Id = 1, Author = "George R.R. Martin", Title = "A Game of Thrones: A Song of Ice and Fire: Book One", EbookAvailable = true, Categories = new [] { 1, 2 }, Price = 5.60m, ReleaseDate = new DateTime(1997, 8, 4) }); session.Delete<Book>(10); await session.FlushChangesAsync(); }