我在Windows 10(UWP)应用程序中使用MvvmCross和AsyncEx库。
在ViewModel中,我有一个INotifyTaskCompletion属性(1),它连接到ViewModel(2)中的Async方法
在(2)中,我调用了一个Async库方法:
缓存代码不能异步,因此库方法包含阻塞代码和异步代码。
Q值。什么是阻止阻止UI线程的最佳方法?
我从Stephen Cleary了解到不要在异步代码中阻塞而不在库方法中使用Task.Run。所以我必须......。
将缓存调用移动到(2)例如
有更好的方法吗?
答案 0 :(得分:4)
如果你有完全同步的代码,你可以改变它以使其返回等待,并希望使其异步,那么是的,如果你想使用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;
}
应该没问题。