2010-09-13 77 views
4

在閱讀recent MSDN Magazine article about the Task scheduler之後,我希望(並且實際上非常激動)使用它會有利於我使用WCF生成的代理。有沒有一種有效的方式來使用WCF服務代理System.Threading.Tasks?

我希望能得到一些具有以下優點:

  • 1)有能力中斷運行WCF操作(我不期待這個停止服務器上的操作 - 我就像能夠發出'我不想要這個任務的結果'一樣,這在用戶界面中特別常見,因爲有人會重複選擇觸發服務調用的網格項)
  • 2)啓動一個任務,而不是當它被創建時 - 我不知道我真的需要這個,我只是覺得它可能是很好的生成一個任務,而不是立即運行它。畢竟我認爲這是完成任務的重點。
  • 3)綁定屬性 - 所以我可以綁定我的WCF用戶界面到IsCompleted,讓Task類從我的用戶界面抽象出操作的內部。
  • 4)有能力操作的抽象掉運行 - 嘲諷,等等等等,未來重構等

但是 - 我似乎並沒有得到任何的這些好處。

  • 1)在任務中沒有中止功能 - 這讓我覺得很奇怪。
  • 2)我可以與Task.Factory.FromAsync<>一起工作的唯一過載是下面顯示的那個。這會立即開始執行web服務操作(如Fiddler中所示),並且不會讓我稍後再開始通話。
  • 3)任務不執行INotifyPropertyChanged,所以我不能將它綁定到用戶界面。
  • 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 
}); 
+0

作爲您正在查找的中止功能與任務中的取消功能之間的區別,您會看到什麼? – 2010-09-13 02:57:50

+0

@john - 完全一樣 - 但沒有Cancel()方法。有一個IsCancelled方法,但沒有Cancel()。雖然我現在看到,我可以取消使用取消令牌http://msdn.microsoft.com/en-us/library/dd997364.aspx – 2010-09-13 03:04:24

+1

CancellationToken是做取消的方法。 – 2010-09-13 03:05:59

回答

1

作爲新的異步功能,微軟正計劃爲C#的下一個版本的一部分,他們已經發布了一個CTP here,它是用VS 2010 SP1兼容。

一會兒回來去吧,我寫了一篇關於與CTP捆綁在一起的樣本的小博客帖子,關於TaskWsdlImportExtension

相關問題