2013-05-18 4 views
5

Ho questo codice di esempio:Ottieni il risultato per l'ultima attività <> (continuazione)?

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 

ovviamente riportare il Result dal compito t1. (Che è 1)

Ma come posso ottenere il Result dall'ultimo compito continuato (Va 3 {1 + 1 + 1})

risposta

4

ContinueWith si restituisce un compito - Task<int> in questo caso . Puoi fare qualsiasi cosa (più o meno - non è possibile mantenere manualmente Start una continuazione, ad esempio) con questa attività che avresti potuto fare con l'attività "originale", compresa l'attesa del completamento e l'ispezione del risultato.

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

Perché è importante dove metto a scrivere continua? –

+0

Non sai cosa intendi. Potresti chiarire? Il TPL è "coerente" in questo caso, nel senso che anche il proseguimento di un'attività è un compito. – Ani

+0

So che continuewith restituisce un compito. D: Penso che sia piuttosto semplice: t1 si riferisce solo alla prima attività. più tardi questo compito viene aggiunto con un altro compito, ma non posso accedervi dall'esterno. ma nella tua risposta, t2 fa riferimento all'ultima operazione continuata, quindi puoi ottenere il valore. è corretto ? –