public static Task <TablePermissions> GetPermissionsAsync(this CloudTable tbl, TableRequestOptions opt, OperationContext ctx, CancellationToken token) { ICancellableAsyncResult result = null; if (opt == null && ctx == null) { result = tbl.BeginGetPermissions(null, null); } else { result = tbl.BeginGetPermissions(opt, ctx, null, null); } var cancellationRegistration = token.Register(result.Cancel); return(Task.Factory.FromAsync(result, ar => { cancellationRegistration.Dispose(); try { return tbl.EndGetPermissions(ar); } catch (StorageException se) { // Todo: Use the PnP azure retry block here for transient exceptions throw; } })); }
/// <summary> /// Gets the permissions settings for the table asynchronously. /// </summary> /// <param name="cloudTable">Cloud table.</param> /// <param name="cancellationToken">Cancellation token.</param> /// <returns> /// The table's permissions. /// </returns> public static Task <TablePermissions> GetPermissionsAsync( this CloudTable cloudTable, CancellationToken cancellationToken = default(CancellationToken)) { ICancellableAsyncResult asyncResult = cloudTable.BeginGetPermissions(null, null); CancellationTokenRegistration registration = cancellationToken.Register(p => asyncResult.Cancel(), null); return(Task <TablePermissions> .Factory.FromAsync( asyncResult, result => { registration.Dispose(); return cloudTable.EndGetPermissions(result); })); }
public TablePermissions EndGetPermissions(IAsyncResult asyncResult) { return(_cloudTable.EndGetPermissions(asyncResult)); }
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(); } }