public static Task SetPermissionsAsync(this CloudTable tbl, TablePermissions perms, TableRequestOptions opt, OperationContext ctx, CancellationToken token) { ICancellableAsyncResult result = null; if (opt == null && ctx == null) { result = tbl.BeginSetPermissions(perms, null, null); } else { result = tbl.BeginSetPermissions(perms, opt, ctx, null, null); } var cancellationRegistration = token.Register(result.Cancel); return(Task.Factory.FromAsync(result, ar => { cancellationRegistration.Dispose(); try { tbl.EndSetPermissions(ar); } catch (StorageException se) { // Todo: Use the PnP azure retry block here for transient exceptions throw; } })); }
/// <summary> /// Sets the permissions settings for the table asynchronously. /// </summary> /// <param name="cloudTable">Cloud table.</param> /// <param name="tablePermissions"> /// A <see cref="T:Microsoft.WindowsAzure.Storage.Table.TablePermissions" /> object that represents the permissions to set. /// </param> /// <param name="cancellationToken">Cancellation token.</param> public static Task SetPermissionsAsync( this CloudTable cloudTable, TablePermissions tablePermissions, CancellationToken cancellationToken = default(CancellationToken)) { ICancellableAsyncResult asyncResult = cloudTable.BeginSetPermissions(tablePermissions, null, null); CancellationTokenRegistration registration = cancellationToken.Register(p => asyncResult.Cancel(), null); return(Task.Factory.FromAsync( asyncResult, result => { registration.Dispose(); cloudTable.EndSetPermissions(result); })); }
public ICancellableAsyncResult BeginSetPermissions(TablePermissions permissions, AsyncCallback callback, object state) { return(_cloudTable.BeginSetPermissions(permissions, callback, state)); }
public void TableSetGetPermissionsAPM() { CloudTableClient tableClient = GenerateCloudTableClient(); CloudTable table = tableClient.GetTableReference("T" + Guid.NewGuid().ToString("N")); try { table.Create(); TableServiceContext context = tableClient.GetTableServiceContext(); context.AddObject(table.Name, new BaseEntity("PK", "RK")); context.SaveChangesWithRetries(); TablePermissions expectedPermissions = new TablePermissions(); TablePermissions testPermissions = table.GetPermissions(); AssertPermissionsEqual(expectedPermissions, testPermissions); // Add a policy, check setting and getting. expectedPermissions.SharedAccessPolicies.Add(Guid.NewGuid().ToString(), new SharedAccessTablePolicy { Permissions = SharedAccessTablePermissions.Query, SharedAccessStartTime = DateTimeOffset.Now - TimeSpan.FromHours(1), SharedAccessExpiryTime = DateTimeOffset.Now + TimeSpan.FromHours(1) }); using (ManualResetEvent evt = new ManualResetEvent(false)) { IAsyncResult result = null; table.BeginSetPermissions(expectedPermissions, (res) => { result = res; evt.Set(); }, null); evt.WaitOne(); table.EndSetPermissions(result); } Thread.Sleep(30 * 1000); using (ManualResetEvent evt = new ManualResetEvent(false)) { IAsyncResult result = null; table.BeginGetPermissions((res) => { result = res; evt.Set(); }, null); evt.WaitOne(); testPermissions = table.EndGetPermissions(result); } AssertPermissionsEqual(expectedPermissions, testPermissions); } finally { table.DeleteIfExists(); } }