我应该在Windows Phone 8中将异步调用转换为同步吗?

时间:2015-02-04 08:37:21

标签: c# .net windows-phone-7 windows-phone-8 async-await

我是一位经验丰富的程序员,曾经在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异步调用它以避免阻塞主线程?

2 个答案:

答案 0 :(得分:5)

  

我应该使用其中一个“切断”网络层中的异步链   并负责从UI异步调用它   避免阻塞主线程?

别。 async用于在调用链中一直传播。这就是模式说"async all the way"的原因。

我明白为什么你一开始会感到“震惊”。理解您的整个调用层次结构需要异步,有点压倒性,I.E添加额外的TaskTask<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;