namespace System.Data.Services.Client.Async { using System; using System.Collections.Generic; using System.Data.Services.Client; using System.Threading.Tasks; public static class DataServiceContextAsyncExtensions { public static async Task> ExecuteAsync(this DataServiceQuery query) { var queryTask = Task.Factory.FromAsync>(query.BeginExecute(null, null), (queryAsyncResult) => { var results = query.EndExecute(queryAsyncResult); return results; }); return await queryTask; } public static async Task> ExecuteAsync(this DataServiceContext context, Uri requestUri) { var queryTask = Task.Factory.FromAsync>(context.BeginExecute(requestUri, null, null), (queryAsyncResult) => { var results = context.EndExecute(queryAsyncResult); return results; }); return await queryTask; } public static async Task> ExecuteAsync(this DataServiceContext context, DataServiceQueryContinuation queryContinuationToken) { var queryTask = Task.Factory.FromAsync>(context.BeginExecute(queryContinuationToken, null, null), (queryAsyncResult) => { var results = context.EndExecute(queryAsyncResult); return results; }); return await queryTask; } public static async Task> LoadPropertyAsync(this DataServiceContext context, object entity, string propertyName) { var queryTask = Task.Factory.FromAsync>(context.BeginLoadProperty(entity, propertyName, null, null), (loadPropertyAsyncResult) => { var results = context.EndLoadProperty(loadPropertyAsyncResult); return (IEnumerable)results; }); return await queryTask; } public static async Task> LoadPropertyAsync(this DataServiceContext context, object entity, string propertyName, DataServiceQueryContinuation continuation) { var queryTask = Task.Factory.FromAsync>(context.BeginLoadProperty(entity, propertyName, continuation, null, null), (loadPropertyAsyncResult) => { var results = context.EndLoadProperty(loadPropertyAsyncResult); return (IEnumerable)results; }); return await queryTask; } public static async Task> LoadPropertyAsync(this DataServiceContext context, object entity, string propertyName, Uri nextLinkUri) { var queryTask = Task.Factory.FromAsync>(context.BeginLoadProperty(entity, propertyName, nextLinkUri, null, null), (loadPropertyAsyncResult) => { var results = context.EndLoadProperty(loadPropertyAsyncResult); return (IEnumerable)results; }); return await queryTask; } public static async Task ExecuteBatchAsync(this DataServiceContext context, params DataServiceRequest[] requests) { var queryTask = Task.Factory.FromAsync(context.BeginExecuteBatch(null, null, requests), (queryAsyncResult) => { var results = context.EndExecuteBatch(queryAsyncResult); return results; }); return await queryTask; } public static async Task SaveChangesAsync(this DataServiceContext context) { return await SaveChangesAsync(context, SaveChangesOptions.None); } public static async Task SaveChangesAsync(this DataServiceContext context, SaveChangesOptions options) { var queryTask = Task.Factory.FromAsync(context.BeginSaveChanges(options, null, null), (queryAsyncResult) => { var results = context.EndSaveChanges(queryAsyncResult); return results; }); return await queryTask; } } }