如何在同步应用程序中调用documentdb c#API

时间:2017-01-28 16:23:24

标签: azure-cosmosdb

我将documentdb添加到现有应用程序(~500kloc)。我无法一直做到异步'即使我想,也要重写这个应用程序。

所有C#API都是异步的。与这些调用同步的显而易见的方法是.Wait()。这就是几个MS样本应用程序所做的事情,但是当我之前提出类似问题时,我们的共识是“不要这样做。”等待您冒着死锁的风险'

我在SO中找到了这个没有答案的确切问题,只是评论。一个人说“等待”,一个人说“使用等待”#39;在说'你不能这样做'

'使用await'由于我们仍处于异步状态,因此无法解决问题,因此这些评论都没有提供答案

3 个答案:

答案 0 :(得分:3)

当存在同步上下文(ASP / WPF / Winforms)时,所有DocumentDB异步API都将使用Task.Run来运行任务。 这意味着,可以直接在DocumentDB C#API上调用.Result或.Wait。

答案 1 :(得分:1)

您可以使用以下方法从非异步方法调用异步方法:

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

然后你可以通过调用

来避免死锁
myThread.Wait();

答案 2 :(得分:1)

阻塞调用(n个示例是由于C#7之前缺少“异步主”)。 建议不要在应用程序中使用阻塞调用。