1

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

4

1 回答 1

2

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

有了Microsoft.Bcl.Async,大部分平台都支持async。但是,在某些情况下 TAP 或不可Task用,例如 Windows Phone 7.0、.NET CF、SL 3。如果我必须支持其中一个平台,我只会使用回调。

于 2013-07-05T02:47:00.620 回答