2016-09-09 5 views
0

Здесь я пытаюсь выполнить хранимую процедуру azure documentdb в C#.Azure DocumentDB запрос асинхронных запросов

static string EndpointUri = "https://asdf.documents.azure.com:443/"; 
    static string PrimaryKey = "X"; 
    static DocumentClient client = new DocumentClient(new Uri(EndpointUri), PrimaryKey); 

    static void Main(string[] args) 
    { 
     var x = doit(); 
     Read(); 
    } 
    public static async Task<string> doit() 
    { 

     StoredProcedureResponse<string> sprocResponse = await client.ExecuteStoredProcedureAsync<string>("/dbs/eew/colls/fff/sprocs/ggg/", "[email protected]"); 
     return ""; 
    } 

Я хотел вызов метода ExecuteStoredProcedureAsync быть выполнен синхронной. Вот как я это сделал.

Из того, что я понимаю, теперь это должно работать как вызов синхронного метода, потому что я добавил ожидание запроса. Но это не работает.

Я уверен, что это происходит из-за моего отсутствия понимания об асинхронном ожидании использования C#.

Я не смог найти способ решить эту проблему в Google.

Как я могу сделать это синхронно.

+0

Вы, вероятно, захотите пойти и изменить свой ключ в Лазуре прямо сейчас; вы только что дали доступ в Интернет для создания баз данных и потратили деньги на свой счет :) – Frans

+0

@Frans Спасибо !. Но перед публикацией я изменил некоторые символы. Я не такой глупый :). –

+0

Привет, просто общий совет; лучше всего изменить его до xxx перед публикацией. В лучшем случае вы получаете таких людей, как я, беспокоиться, в худшем случае вы получаете кого-то, кто использует его в качестве семени, чтобы переборщить пароль ... Если в этой учетной записи есть данные о производстве, и я был вашим csio, я бы настаивал на его изменении :) – Frans

ответ

0

Изменить

var x = doit(); 

Для

var x = doit().Result; 

Примечание; что будет прекрасно работать в этом простом консольном приложении, но может вызвать взаимоблокировки в реальном приложении. Если вы должны выполнить синхронизацию в реальном приложении, вы должны сделать что-то вроде этого;

var x = Task.Run(() => doit()).Result; 

Объяснение этого выходит за рамки того, что я с легкостью смогу ответить в ответ, извините. Если у вас есть доступ к Pluralsight, это отличное объяснение Jon Skeet: https://www.pluralsight.com/courses/skeet-async. В противном случае, C# в двух словах (книга) или учебник онлайн.

+0

Существует также набор хороших статей Стивена Клири, которые рассказывают об асинхронном шаблоне в .NET. Вот один пример: http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html –

+0

@ Liu да, хороший крик, они очень хорошие. – Frans

Смежные вопросы