4

在阅读了最近一篇关于任务调度程序的 MSDN 杂志文章后,我希望(并且实际上非常兴奋)使用它会有益于我使用 WCF 生成的代理。

我希望获得以下一些好处:

  • 1)能够中止正在运行的 WCF 操作(我不希望这会停止服务器上的操作 - 我只是希望能够发出信号'我不想要此任务的结果'。这是在 UI 中尤其常见,其中有人从触发服务调用的网格中重复选择项目。)
  • 2) 能够在创建任务之外的某个时间点启动任务——我不确定我是否真的需要这个,我只是认为生成一个任务而不是立即运行它可能会很好。毕竟我认为这就是任务的全部意义所在。
  • 3) 可绑定属性——因此我可以将我的 WCF UI 绑定到IsCompleted并让 Task 类从我的 UI 中抽象出操作的内部结构。
  • 4)能够抽象出操作的运行- 模拟,等等等等,未来的重构等。

但是 - 我似乎没有得到任何这些好处。

  • 1)Task 中没有中止功能——这让我觉得很奇怪。
  • 2)我可以使用的唯一重载Task.Factory.FromAsync<>是下面显示的重载。这会立即开始执行 web 服务操作(如 Fiddler 中所示),并且不允许我稍后开始调用。
  • 3) 任务没有实现INotifyPropertyChanged,所以我无法将它绑定到 UI。
  • 4)鉴于其他3个好处没有发生,这个有点死在水中:-(

Sooo .... 我只是在浪费时间试图让 WCF 生成的代理与任务一起工作——还是我错过了一些东西。

// WCF client
var client = new ShoppingCartClient();

// create task
var t = Task.Factory.FromAsync<GetOrderDetailsMsgOut>(
              client.BeginGetOrderDetails(new GetOrderDetailsMsgIn()
              {
                  OrderId = 12345
              },  null, null),    
              client.EndGetOrderDetails);

t.ContinueWith(x =>
{
    var order = x.Result.Order;
    // do something with order
}); 
4

1 回答 1

1

作为微软为下一个 C# 版本计划的新 Async 功能的一部分,他们在这里发布了一个 CTP ,它与 VS 2010 SP1 兼容。

不久前,我写了一篇关于与 CTP 捆绑在一起的示例的小博客文章,关于TaskWsdlImportExtension

于 2011-04-28T10:14:58.633 回答