异步CSLA呼叫

时间:2013-07-03 17:24:54

标签: csla

“标准”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技术仍然有用?在做一个新项目的时候,如果我能帮忙的话,我宁愿没有那些方法。

1 个答案:

答案 0 :(得分:2)

就我个人而言,在我的所有代码中,我更喜欢TAP方法而不是回调。

使用Microsoft.Bcl.Async,大多数平台都支持async。但是,有一些情况下TAP和Task都不可用,例如,Windows Phone 7.0,.NET CF,SL 3.如果我不得不支持其中一个平台,我只会使用回调。