我已经尝试了创建表的所有四种方法变体:
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
并显式等待从异步表单返回的任务。
铌与 https://github.com/Azure-Samples/azure-cosmos-table-dotnet-core-getting-started.git 的演示应用程序的行为相同
从未使用过.Wait()
(或.Result
(,特别是如果它来自UI线程(或控制器方法(,因为它可能导致死锁。
将您的方法更改为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;
}