C# 是否有有效的方法将System.Threading.Tasks与WCF服务代理一起使用?
在阅读了一篇文章之后,我希望(实际上相当激动)使用它会有助于我使用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绑定
- 1)中止正在运行的WCF操作的能力(我不希望这会停止服务器上的操作-我只希望能够发出信号“我不希望此任务的结果”。这在UI中尤其常见,在UI中,有人会重复从网格中选择触发服务调用的项。)
- 2)在创建任务时以外的其他时间启动任务的能力-我不确定我是否真的需要它,我只是认为生成任务而不是立即运行它可能会很好。毕竟,我认为这就是任务的全部意义所在
- 3)可绑定属性-因此我可以将我的WCF UI绑定到
,并让任务类从我的UI中抽象出操作的内部IsCompleted
- 4)抽象出操作运行的能力-模仿、胡说八道、未来重构等
- 1) 任务中没有中止功能,这让我觉得很奇怪
- 2) 我在使用
时唯一能得到的重载如下所示。这将立即开始执行webservice操作(如Fiddler中所示),并且不允许我稍后启动调用Task.Factory.fromsync
- 3) 任务未实现INotifyPropertyChanged,因此无法将其绑定到UI
- 4) 考虑到其他3个好处没有发生,这一个有点像死在水中:-(
// 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时,我不能指定一个。除非我将任务创建为一个操作,但还有线程池问题需要担心