我应该在 Windows Phone 8 中将异步调用转换为同步吗?
Should I convert the async calls to sync in Windows Phone 8?
我是一个非常有经验的程序员,曾经在 Android 编程,最近开始为 Windows Phone 编程。
当我发现 C# 5.0 中引入的 async/await 范式时。
我很喜欢,但是我的第一个应用程序编程注意到,例如一个用于登录请求的简单网络连接,使得异步在代码中传播,从网络层到演示文稿。这让我感到震惊,因为它迫使我重写所有接口,使它们成为 return 任务而不是原始结果类型。
例如
public LoginRespose login(string username, string password)
转换为
public Task<LoginResponse> login(string username,string password);
我见过很多帮助程序 类 可以将异步调用转换为同步调用。我是否应该将其中之一用于 "cut" 网络层中的异步链并注意从 UI 异步调用它以避免阻塞主线程?
Should I use one of them to "cut" the async chain in the network layer
and take care of calling it asynchronously from the UI in order to
avoid blocking the main thread?
不要。 async
是为了在调用链中一直向上传播。这就是模式显示 "async all the way" 的原因。
我明白你为什么一开始会是 "shocked"。理解您的整个调用层次结构需要异步,即添加额外的 Task
或 Task<T>
方法以使用异步有点难以理解。但是让它在你身上成长,这绝对是要走的路。 Don't block on async code, 拥抱它。
例如,使用 IAsyncCommand
而不是处理异步操作的 ICommand
。
喜欢:
var task1 = ApplicationData.Current.LocalFolder.CreateFolderAsync(folderName,
CreationCollisionOption.OpenIfExists).AsTask();
task1.Wait();
var logFolder = task1.Result;
我是一个非常有经验的程序员,曾经在 Android 编程,最近开始为 Windows Phone 编程。 当我发现 C# 5.0 中引入的 async/await 范式时。
我很喜欢,但是我的第一个应用程序编程注意到,例如一个用于登录请求的简单网络连接,使得异步在代码中传播,从网络层到演示文稿。这让我感到震惊,因为它迫使我重写所有接口,使它们成为 return 任务而不是原始结果类型。
例如
public LoginRespose login(string username, string password)
转换为
public Task<LoginResponse> login(string username,string password);
我见过很多帮助程序 类 可以将异步调用转换为同步调用。我是否应该将其中之一用于 "cut" 网络层中的异步链并注意从 UI 异步调用它以避免阻塞主线程?
Should I use one of them to "cut" the async chain in the network layer and take care of calling it asynchronously from the UI in order to avoid blocking the main thread?
不要。 async
是为了在调用链中一直向上传播。这就是模式显示 "async all the way" 的原因。
我明白你为什么一开始会是 "shocked"。理解您的整个调用层次结构需要异步,即添加额外的 Task
或 Task<T>
方法以使用异步有点难以理解。但是让它在你身上成长,这绝对是要走的路。 Don't block on async code, 拥抱它。
例如,使用 IAsyncCommand
而不是处理异步操作的 ICommand
。
喜欢:
var task1 = ApplicationData.Current.LocalFolder.CreateFolderAsync(folderName,
CreationCollisionOption.OpenIfExists).AsTask();
task1.Wait();
var logFolder = task1.Result;