我将documentdb添加到现有应用程序(~500kloc)。我无法一直做到异步'即使我想,也要重写这个应用程序。
所有C#API都是异步的。与这些调用同步的显而易见的方法是.Wait()
。这就是几个MS样本应用程序所做的事情,但是当我之前提出类似问题时,我们的共识是“不要这样做。”等待您冒着死锁的风险'
我在SO中找到了这个没有答案的确切问题,只是评论。一个人说“等待”,一个人说“使用等待”#39;在说'你不能这样做'
'使用await'由于我们仍处于异步状态,因此无法解决问题,因此这些评论都没有提供答案
答案 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之前缺少“异步主”)。 建议不要在应用程序中使用阻塞调用。