2010-09-13 76 views
4

在阅读recent MSDN Magazine article about the Task scheduler之后,我希望(并且实际上非常激动)使用它会有利于我使用WCF生成的代理。有没有一种有效的方式来使用WCF服务代理System.Threading.Tasks?

我希望能得到一些具有以下优点:

  • 1)有能力中断运行WCF操作(我不期待这个停止服务器上的操作 - 我就像能够发出'我不想要这个任务的结果'一样,这在用户界面中特别常见,因为有人会重复选择触发服务调用的网格项)
  • 2)启动一个任务,而不是当它被创建时 - 我不知道我真的需要这个,我只是觉得它可能是很好的生成一个任务,而不是立即运行它。毕竟我认为这是完成任务的重点。
  • 3)绑定属性 - 所以我可以绑定我的WCF用户界面到IsCompleted,让Task类从我的用户界面抽象出操作的内部。
  • 4)有能力操作的抽象掉运行 - 嘲讽,等等等等,未来重构等

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

  • 1)在任务中没有中止功能 - 这让我觉得很奇怪。
  • 2)我可以与Task.Factory.FromAsync<>一起工作的唯一过载是下面显示的那个。这会立即开始执行web服务操作(如Fiddler中所示),并且不会让我稍后再开始通话。
  • 3)任务不执行INotifyPropertyChanged,所以我不能将它绑定到用户界面。
  • 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 
}); 
+0

作为您正在查找的中止功能与任务中的取消功能之间的区别,您会看到什么? – 2010-09-13 02:57:50

+0

@john - 完全一样 - 但没有Cancel()方法。有一个IsCancelled方法,但没有Cancel()。虽然我现在看到,我可以取消使用取消令牌http://msdn.microsoft.com/en-us/library/dd997364.aspx – 2010-09-13 03:04:24

+1

CancellationToken是做取消的方法。 – 2010-09-13 03:05:59

回答

1

作为新的异步功能,微软正计划为C#的下一个版本的一部分,他们已经发布了一个CTP here,它是用VS 2010 SP1兼容。

一会儿回来去吧,我写了一篇关于与CTP捆绑在一起的样本的小博客帖子,关于TaskWsdlImportExtension

相关问题