Azure CosmosDB SQL API createDatabaseAsync не создает базу данных

Я использую API SQL Azure CosmosDB. У меня есть асинхронная задача для подключения к моей учетной записи AzureCosmosDB, и я пытаюсь создать базу данных с помощью кода.

Ниже приведен мой фрагмент кода.

private async Task ConnectToDocumentDB()
{
this.client = new DocumentClient(new Uri(EndpointUrl), PrimaryKey);
Console.WriteLine(client.WriteEndpoint);
Database db = await this.client.CreateDatabaseIfNotExistsAsync(new Database { Id = "MyDB" });
Console.WriteLine("Response --" + db.Id);           
}

Когда я просматриваю клиентский EndPonit в консоли, чтобы убедиться в подключении AzureCosmosDb, я могу просмотреть правильную конечную точку. Но когда я пытаюсь создать базу данных, она не создает базу данных.

Вызов метода этой асинхронной задачи из основного метода выглядит следующим образом

 Program p = new Program();
 p.ConnectToDocumentDB().Wait();

Я не знаю, где я ошибаюсь. Помогите мне с этой проблемой.

Заранее спасибо!


person code-geek    schedule 27.11.2018    source источник
comment
Вы пробовали отладку через код? Какой ответ от CreateDatabaseIfNotExistsAsync? Ответ представляет собой ResourceResponse<Database> с неявным оператором, поэтому я бы предпочел, чтобы вы вернули его, чтобы мы могли отладить его, используя метаданные ответа.   -  person Nick Chapsas    schedule 27.11.2018
comment
@NickChapsas Да, я пробовал отладить код. Но когда программный элемент управления достигает вызова метода createDatabaseAsync, программа завершается, и исключение также не генерируется, поэтому я не могу просмотреть ResourceResponse.   -  person code-geek    schedule 27.11.2018
comment
Вы пытались обернуть его в try-catch и посмотреть, является ли это исключением, которое игнорируются вашими настройками исключения? Также не используйте .Wait() в программе. Вместо этого используйте .GetAwaiter().GetResult().   -  person Nick Chapsas    schedule 27.11.2018
comment
@NickChapsas Спасибо! Теперь он отлично работает   -  person code-geek    schedule 27.11.2018
comment
Я написал ответ. Не стесняйтесь принять это.   -  person Nick Chapsas    schedule 27.11.2018


Ответы (1)


В зависимости от контекста вашего приложения .Wait() может вызвать тупик, когда ваш код достигает async вызова.

Вы должны использовать .GetAwaiter().GetResult(), чтобы конечный автомат правильно генерировался за кулисами, чтобы предотвратить эту проблему.

person Nick Chapsas    schedule 27.11.2018