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
});
作爲您正在查找的中止功能與任務中的取消功能之間的區別,您會看到什麼? – 2010-09-13 02:57:50
@john - 完全一樣 - 但沒有Cancel()方法。有一個IsCancelled方法,但沒有Cancel()。雖然我現在看到,我可以取消使用取消令牌http://msdn.microsoft.com/en-us/library/dd997364.aspx – 2010-09-13 03:04:24
CancellationToken是做取消的方法。 – 2010-09-13 03:05:59