2013-05-18 32 views
5

Tôi có mẫu này mã:Nhận kết quả cho Nhiệm vụ cuối cùng <> (tiếp tục)?

Task<int> t1= new Task<int>(()=>1); 
t1.ContinueWith(r=>1+r.Result).ContinueWith(r=>1+r.Result); 
t1.Start(); 

Console.Write(t1.Result); //1 

Nó rõ ràng là trả lại Result từ nhiệm vụ t1. (Đó là 1)

Nhưng làm thế nào tôi có thể nhận được Result từ cuối cùng nhiệm vụ tiếp tục (nó phải được 3 {1 + 1 + 1})

Trả lời

4

ContinueWith tự trả về một nhiệm vụ - Task<int> trong trường hợp này . Bạn có thể làm bất cứ điều gì (nhiều hơn hoặc ít hơn - bạn không thể tự mình làm một ví dụ) bạn muốn với nhiệm vụ này mà bạn có thể thực hiện với tác vụ 'ban đầu', bao gồm cả việc chờ hoàn thành và kiểm tra kết quả của nó.

var t1 = new Task<int>(() => 1); 
var t2 = t1.ContinueWith(r => 1 + r.Result) 
      .ContinueWith(r => 1 + r.Result); 

t1.Start(); 

Console.Write(t1.Result); //1 
Console.Write(t2.Result); //3 
+0

Tại sao tôi đặt viết tiếp tục? –

+0

Không chắc chắn ý bạn là gì. Bạn có thể làm rõ? TPL là 'nhất quán' trong trường hợp này theo nghĩa là việc tiếp tục nhiệm vụ cũng là một nhiệm vụ. – Ani

+0

Tôi biết rằng liên tục trả về một nhiệm vụ. Q: Tôi nghĩ nó khá đơn giản: t1 chỉ đề cập đến nhiệm vụ đầu tiên. sau này nhiệm vụ này đang được thêm vào với một nhiệm vụ khác nhưng tôi không thể truy cập chúng từ bên ngoài. nhưng trong câu trả lời của bạn, t2 không đề cập đến nhiệm vụ tiếp theo cuối cùng, vì vậy bạn có thể nhận được giá trị. đúng không ? –