加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 是否有一种有效的方法来使用带有WCF服务代理的System.Thre

发布时间:2020-12-15 21:11:01 所属栏目:百科 来源:网络整理
导读:在阅读了 recent MSDN Magazine article about the Task scheduler之后,我希望(并且实际上非常兴奋)使用它将有利于我使用WCF生成的代理. 我希望得到以下一些好处: 1)能够中止正在运行的WCF操作(我不希望这会停止服务器上的操作 – 我只是想能够发出’我不想
在阅读了 recent MSDN Magazine article about the Task scheduler之后,我希望(并且实际上非常兴奋)使用它将有利于我使用WCF生成的代理.

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

> 1)能够中止正在运行的WCF操作(我不希望这会停止服务器上的操作 – 我只是想能够发出’我不想要这个任务的结果’的信号.在UI中特别常见,有人从网格中重复选择触发服务调用的项目.)
> 2)能够在创建任务之外的某个时刻启动任务 – 我不确定我是否真的需要这个,我只是认为生成任务并不立即运行它可能会很好.毕竟我认为这是完成任务的重点.
> 3)可绑定属性 – 所以我可以将我的WCF UI绑定到IsCompleted,让Task类从我的UI中抽象出操作的内部.
> 4)能够抽象出操作的运行 – 嘲笑,等等等等,未来的重构等等.

但是 – 我似乎没有获得任何这些好处.

> 1)任务中没有中止功能 – 这让我很奇怪.
> 2)我可以使用Task.Factory.FromAsync<>的唯一重载如下所示.这立即开始执行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
});

解决方法

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

不久之前,我写了一篇关于其中一个与CTP捆绑在一起的样本的小博客文章,关于TaskWsdlImportExtension.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读