我已经尝试了创建表的方法的所有四种变体:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
var tableClient = storageAccount.CreateCloudTableClient();
var table = tableClient.GetTableReference("test");
var task = table.CreateIfNotExistsAsync();
task.Wait();
return table;
Azure存储资源管理器创建了一个没有任何延迟的表。
没有超时或其他异常,只是挂起。
有任何想法吗?我很难想到如何调试它。
我在ASP.NET应用程序和控制台应用程序中尝试过这个。我已经尝试了方法的异步和同步形式。我尝试使用async
/ await
并显式等待异步表单中返回的任务。
NB与https://github.com/Azure-Samples/azure-cosmos-table-dotnet-core-getting-started.git上的演示应用程序的行为相同
从未使用过.Wait()
(或.Result
),特别是如果它来自UI线程(或Controller方法),因为它可能导致死锁。
将您的方法更改为async Task<T>
。
例:
public async Task<Table> CreateTableIfNotExistsAsync()
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
var tableClient = storageAccount.CreateCloudTableClient();
var table = tableClient.GetTableReference("test");
await table.CreateIfNotExistsAsync();
return table;
}
如果你无法将其转换为异步代码,那么你可以尝试使用ConfigureAwait(false)
,但只有在调用此方法的任何方法以及调用的任何方法也使用它时,这才会起作用。
public Table CreateTableIfNotExists()
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
var tableClient = storageAccount.CreateCloudTableClient();
var table = tableClient.GetTableReference("test");
table.CreateIfNotExistsAsync().ConfigureAwait(false).GetAwaiter().GetResult();
return table;
}