【发布时间】:2016-03-21 17:55:18
【问题描述】:
我在 Windows 10 (UWP) 应用程序中使用 MvvmCross 和 AsyncEx 库。
在 ViewModel 中,我有一个 INotifyTaskCompletion 属性 (1),它连接到 ViewModel (2) 中的 Async 方法
在(2)中,我调用了一个异步库方法:
- 检查本地缓存
- 异步下载数据
- 将数据添加到缓存中
缓存代码不能异步,因此库方法包含阻塞代码和异步代码。
问。防止阻塞 UI 线程的最佳方法是什么?
我从Stephen Cleary 了解到不要阻塞异步代码,也不要在库方法中使用 Task.Run。所以我必须……。
将缓存调用移动到 (2) 例如
- 使用 Task.Run(检查缓存)
- 异步调用库方法
- 再次使用Task.Run(缓存数据)?
有没有更好的办法?
【问题讨论】:
-
你有一些代码可以分享吗?
-
取决于您对“更好”的定义。如果您无法更改缓存代码并想使用 async/await,那么使用
Task.Run()缓存代码是“正确的”。
标签: c# asynchronous async-await win-universal-app