2017-01-28 1 views
-1

Я добавляю documentdb в существующее приложение (~ 500kloc). Я не могу полностью переписать этот айсинк, даже если бы захотел.как вызвать documentdb C# API в синхронном приложении

Все API C# являются асинхронными. Очевидный способ синхронизации с этими вызовами - .Wait(). Это то, что делают несколько примеров MS-приложений, однако, когда я ранее задавал аналогичный вопрос, консенсус был «не делайте .wait you risk deadlocks»

Я нашел этот точный вопрос в SO, который не имел никакого ответа, просто комментарии. Один из них сказал «делать .wait», один сказал: «использование ждет» на сказал: «Вы косяк это сделать»

«использования ОЖИДАНИЕМ» оленьей кожи решить вопрос, так как мы все еще асинхронные, то ни один из этих комментариев не дает ответ

ответ

1

всех DocumentDB асинхронной API будет использовать Task.Run для запуска тас k, когда есть контекст синхронизации (ASP/WPF/Winforms). Это означает, что это безопасно для вызова. Результат или. Подождите прямо на DocumentDB C# API.

1

вы могли бы назвать ваш метод асинхронного из метода без использования асинхронного:

var myThread = System.Threading.Tasks.Task.Run(async() => await  
DoSomethingAsync()); 

И тогда вы можете избежать тупиков по телефону

myThread.Wait(); 
+0

, а затем выполните 'myThread.Wait()'? – pm100

+0

Да, это правильно –

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