2012-07-04 15 views
11

Così sto cercando di imparare a programmare con la Task e sto facendo un esercizio:Threading.Tasks.Task' non contiene una definizione per 'Risultato'

public static int ReturnFirstResult(Func<int>[] funcs) 
{ 
     Task[] tasks = new Task[funcs.Length]; 
     for (int i = 0; i < funcs.Length; i++) 
     { 
      tasks[i] = CreatingTask(funcs[i]); 
     } 
     return Task<int>.Factory.ContinueWhenAny(tasks, (firstTask) => 
                  { 
                   Console.WriteLine(firstTask.Result); 
                   return ***????***; 
                  }).***Result***; 
} 
private static Task CreatingTask(Func<int> func) 
{ 
     return Task<int>.Factory.StartNew(() => { return func.Invoke(); }); 
} 

Sto dando un array di Funcs da eseguire, l'ideia è di restituire il risultato della prima funzione che è stata fatta. Il problema è che il campo Risultato non è disponibile ...

Cosa mi manca qui?

risposta

23

stai tornando Task dal metodo CreatingTask - è necessario restituire Task<int>, e quindi modificare tasks essere Task<int>[] invece di Task[].

Fondamentalmente, Task rappresenta un'attività che non produce un risultato, mentre Task<T> rappresenta un'attività che genera un risultato di tipo T. Nel tuo caso, tutto il tuo codice restituisce int, quindi è necessario Task<int> ovunque.

+0

Grazie Jon, ora ho capito :) – RSort

Problemi correlati