How*_*ard 5 c# asynchronous async-await win-universal-app
我在Windows 10(UWP)应用程序中使用MvvmCross和AsyncEx库.
在ViewModel中,我有一个INotifyTaskCompletion属性(1),它连接到ViewModel中的Async方法(2)
在(2)中,我调用了一个Async库方法:
缓存代码不能异步,因此库方法包含阻塞代码和异步代码.
问:防止阻止UI线程的最佳方法是什么?
我从Stephen Cleary了解到,不要阻止异步代码,也不要在库方法中使用Task.Run.所以我必须......
将缓存调用移动到(2)例如
有没有更好的办法?
如果您拥有完全同步的代码,并且无法更改以使其返回等待状态,并且希望使其异步,那么可以,您唯一要使用的选择async/await就是使用Task.Run()。
就像是:
public async Task<T> MyMethod()
{
T result = await Task.Run(() => CheckCacheOnSyncMethodICantChange());
if(result != null)
{
result = await MyLibraryMethodThatReturnsATask();
await Task.Run(() => AddToCacheOnSyncMethodICantChange(result));
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
应该可以。
| 归档时间: |
|
| 查看次数: |
2462 次 |
| 最近记录: |