C# 是否有有效的方法将System.Threading.Tasks与WCF服务代理一起使用?

C# 是否有有效的方法将System.Threading.Tasks与WCF服务代理一起使用?,c#,.net,wcf,task-parallel-library,C#,.net,Wcf,Task Parallel Library,在阅读了一篇文章之后,我希望(实际上相当激动)使用它会有助于我使用WCF生成的代理 我希望获得以下好处: 1)中止正在运行的WCF操作的能力(我不希望这会停止服务器上的操作-我只希望能够发出信号“我不希望此任务的结果”。这在UI中尤其常见,在UI中,有人会重复从网格中选择触发服务调用的项。) 2)在创建任务时以外的其他时间启动任务的能力-我不确定我是否真的需要它,我只是认为生成任务而不是立即运行它可能会很好。毕竟,我认为这就是任务的全部意义所在 3)可绑定属性-因此我可以将我的WCF UI绑定

在阅读了一篇文章之后,我希望(实际上相当激动)使用它会有助于我使用WCF生成的代理

我希望获得以下好处:

  • 1)中止正在运行的WCF操作的能力(我不希望这会停止服务器上的操作-我只希望能够发出信号“我不希望此任务的结果”。这在UI中尤其常见,在UI中,有人会重复从网格中选择触发服务调用的项。)
  • 2)在创建任务时以外的其他时间启动任务的能力-我不确定我是否真的需要它,我只是认为生成任务而不是立即运行它可能会很好。毕竟,我认为这就是任务的全部意义所在
  • 3)可绑定属性-因此我可以将我的WCF UI绑定到
    IsCompleted
    ,并让任务类从我的UI中抽象出操作的内部
  • 4)抽象出操作运行的能力-模仿、胡说八道、未来重构等
然而,我似乎没有得到任何这些好处

  • 1) 任务中没有中止功能,这让我觉得很奇怪
  • 2) 我在使用
    Task.Factory.fromsync
    时唯一能得到的重载如下所示。这将立即开始执行webservice操作(如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
}); 
//WCF客户端
var client=new ShoppingCartClient();
//创建任务
var t=Task.Factory.fromsync(
client.begingToOrderDetails(新的GetOrderDetailsMsgIn()
{
OrderId=12345
},空,空),
client.EndGetOrderDetails);
t、 继续(x=>
{
变量顺序=x.Result.order;
//有条不紊地做事
}); 

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


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

您所寻找的中止功能和任务中的取消功能之间的区别是什么?@john-完全相同-但是没有取消()方法。有一个IsCancelled方法,但没有Cancel()。虽然我现在看到可以使用取消令牌取消,但CancellationToken是执行取消的方法。@john-但在执行FromAsync时,我不能指定一个。除非我将任务创建为一个操作,但还有线程池问题需要担心