“标准”CSLA异步服务器调用通常按以下方式构建:
基类:
public static void GetMyObject(EventHandler<DataPortalResult<MyObject>> callback) {
var dp = new DataPortal<MyObject>();
dp.FetchCompleted += callback;
dp.BeginFetch();
}
视图模型:
protected override void OnInitialize(object parameter) {
base.OnInitialize(parameter);
base.IsBusy = true;
MyObject.GetMyObject((o, e) => {
if (HasNoException(e)) {
Model = e.Object;
}
base.IsBusy = false;
});
}
使用新的async / await功能,格式如下:
public async static Task<MyObject> GetMyObject() {
return await DataPortal.FetchAsync<MyObject>();
}
和
protected async override void OnInitialize(object parameter) {
base.OnInitialize(parameter);
base.IsBusy = true;
Model = await MyObject.GetMyObjectAsync();
base.IsBusy = false;
}
此时是否应该将回调模式视为已弃用,还是对某些UI技术仍然有用?在做一个新项目的时候,如果我能帮忙的话,我宁愿没有那些方法。
答案 0 :(得分:2)
就我个人而言,在我的所有代码中,我更喜欢TAP方法而不是回调。
使用Microsoft.Bcl.Async
,大多数平台都支持async
。但是,有一些情况下TAP和Task
都不可用,例如,Windows Phone 7.0,.NET CF,SL 3.如果我不得不支持其中一个平台,我只会使用回调。