簡體   English   中英

有沒有一種有效的方法來使用System.Threading.Tasks與WCF服務代理?

[英]Is there an effective way to use System.Threading.Tasks with WCF service proxies?

在閱讀了最近關於Task調度程序的MSDN雜志文章后,我希望(並且實際上非常興奮)使用它將有利於我使用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,它與VS 2010 SP1兼容。

前段時間,我寫了一篇關於與CTP捆綁在一起的一個樣本的小博客文章,內容涉及TaskWsdlImportExtension

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM