我是一位经验丰富的程序员,曾经在Android上编程,最近开始为Windows Phone编程。 当我发现C#5.0中引入的async / await范例时。
我喜欢,但编程我的第一个应用程序注意到,例如,登录请求的简单网络连接使得异步遍及代码,从网络层到演示文稿。这对我来说很震撼,因为它迫使我重写所有接口,使它们返回Tasks而不是原始结果类型。
在示例中
public LoginRespose login(string username, string password)
转换为
public Task<LoginResponse> login(string username,string password);
我见过很多辅助类,它们允许将异步调用转换为同步调用。我是否应该使用其中一个“切断”网络层中的异步链并负责从UI异步调用它以避免阻塞主线程?
答案 0 :(得分:5)
我应该使用其中一个“切断”网络层中的异步链 并负责从UI异步调用它 避免阻塞主线程?
别。 async
用于在调用链中一直传播。这就是模式说"async all the way"的原因。
我明白为什么你一开始会感到“震惊”。理解您的整个调用层次结构需要异步,有点压倒性,I.E添加额外的Task
或Task<T>
方法以使用异步。但是让它在你身上成长,这绝对是你要走的路。 Don't block on async code,反而接受它。
例如,使用IAsyncCommand
而不是处理异步操作的ICommand
。
答案 1 :(得分:0)
像:
var task1 = ApplicationData.Current.LocalFolder.CreateFolderAsync(folderName,
CreationCollisionOption.OpenIfExists).AsTask();
task1.Wait();
var logFolder = task1.Result;