无法从MeasureOverride同步调用异步方法

时间:2015-12-27 23:30:32

标签: c# asynchronous async-await uwp

我需要从MeasureOverride调用异步方法。此调用应该是同步的,因为我需要返回异步方法的值。

我尝试了来自这些线程的十几个不同的调用: Synchronously waiting for an async operation, and why does Wait() freeze the program here How would I run an async Task<T> method synchronously?

他们都失败了,有些人不会在通用Windows应用程序中编译,有些不同步,有些会引发僵局等等。

我强烈反对async / await,因为它会污染调用层次结构原型。在覆盖级别,我没有async关键字,我需要从blackbox同步调用await。具体地说,我应该怎么做呢?

1 个答案:

答案 0 :(得分:1)

你应该做的第一件事是退后一步。首先应该没有 need MeasureOverride内调用异步代码。

异步代码通常意味着I / O绑定操作。一个XAML UI元素需要向远程Web服务器发送请求,查询数据库或读取文件,只是为了知道 size 是什么,这样做是错误的。这是对应用认证拒绝的快速通道。

最好的解决方案几乎肯定是将异步代码移出元素本身。 必要的异步工作完成后,才创建/修改UI元素

也就是说,如果你觉得必须在异步操作完成时阻止UI线程,我已经编译了一个我知道的每个hack的列表,发布在my MSDN article on brownfield asynchronous development中。