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

标签 c# .net wcf task-parallel-library

看完recent MSDN Magazine article about the Task scheduler我希望(实际上非​​常兴奋)使用它会对我使用 WCF 生成的代理有益。

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

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

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

  • 1) Task 中没有中止功能 - 这让我觉得很奇怪。
  • 2) 我可以使用的唯一重载 Task.Factory.FromAsync<>是下面显示的那个。这会立即开始执行网络服务操作(如在 Fiddler 中所见)并且不允许我稍后开始调用。
  • 3) 任务没有实现INotifyPropertyChanged所以我无法将它绑定(bind)到 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
}); 

最佳答案

作为 Microsoft 为下一版 C# 计划的新异步功能的一部分,他们发布了 CTP here , 它与 VS 2010 SP1 兼容。

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

关于c# - 是否有将 System.Threading.Tasks 与 WCF 服务代理一起使用的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3697612/

相关文章:

java - 如果我已经拥有 key (作为字符串),则使用 AES 加密 Windows Phone 8 中的数据

c# - 我刚刚开始使用 C#,遵循 freeCodeCamp.org 教程,我想知道为什么这段代码不起作用

c# - 是否可以从 ASP.NET 路由推断站点地图?

.net - 如何填充 ObjectSet (EntityFramework)?

c# - 实现 WCF IErrorHandler 仅用于日志记录

.net-3.5 - 客户端连接到 WCF 托管端点时触发事件

.net - 为什么要创建 EJB 而不是 Web 服务?

c# - MVC 项目中的解析器错误

c# - 将 JsonDictionary 属性应用于字典

c# - 将字典键从 json 反序列化为 .net 中的枚举