2010-12-06 35 views
4

Je tente d'obtenir les données de retour de ma tâche, cela fonctionne bien si j'utilise un seul var, mais quand j'utilise un tableau ou arraylist, je ne vois pas l'interface pour RESULT dans les méthodes de propriétés disponibles de l'objet de tâche.C# Threaded Tasks - ne peut pas obtenir la valeur de retour du tableau de tâches

var task = Task<BookingListResponse> 
      .Factory.StartNew(() => GetServicesFromApi(sc), 
          TaskCreationOptions.LongRunning); 
tasks.Add(task); 
try 
{ 
    // Wait for all the tasks to finish. 
    Task.WaitAll(tasks.ToArray()); 
} 

comme vous pouvez le voir dans le code, si je mets les tâches de nouveau dans un tableau et des tâches de type [1] .Result, il n'expose pas « résultat », si je puis accéder à la tâche que je peux l'obtenir .

Je suis sûr que je fais quelque chose de stupide, donc toute aide serait bonne.

acclame.

Paul.


ici est le code complet:

List<Task> tasks = new List<Task>(); 

// loop schemes and only call DISTINCT transit api URL's 
foreach (Scheme scheme in schemes) 
{ 
    if (url.ContainsKey(scheme.Url)) 
     continue; 

    url.Add(scheme.Url, 0); // add url. 

    var sc = new ServiceCriteria(); 
    sc.Url = scheme.Url; 
    sc.CapacityRequirement = capacityRequirement; 
    sc.DropOffLocation = dropOffLocation; 
    sc.PickUpLocation = pickUpLocation; 
    sc.PickUp = pickup; 
    sc.TravelTime = travelTime; 

    // Fire off thread for each method call. 
    //tasks.Add(Task<BookingListResponse>.Factory.StartNew(apiAttributes => 
    //   GetServicesFromApi(sc), TaskCreationOptions.LongRunning)); 

    var task = Task<BookingListResponse> 
       .Factory.StartNew(() => GetServicesFromApi(sc), 
            TaskCreationOptions.LongRunning); 
    tasks.Add(task); 

} 


try 
{ 
    // Wait for all the tasks to finish. 
    Task.WaitAll(tasks.ToArray()); 
    var result = tasks[0].Result; 
} 

l'option de résultat ne montre pas.

acclame.

+1

Nous pouvons » Je ne vois vraiment pas ça, tu n'as pas collé tout le code pertinent. 1) la déclaration de 'tasks' est manquante. 2) Où vous essayez de lire le résultat est également manquant. –

+1

Où est la définition de 'tâches'? Est-ce que vous finissez avec un tableau de 'Task' au lieu d'un tableau de' Task '? –

+0

oui, je finis avec un tableau de tâches et essayant d'obtenir le résultat des tâches, si j'utilise un tableau de mon BO puis j'obtiens les valeurs, mais je ne suis pas sûr si c'est correct, pourrais-je toujours utiliser le Task.WaitAll et le tableau de BooklingListResult seront remplis? –

Répondre

10

Vous devez jeter votre liste de tâches dans Task<BookingListResponse> ...

donc faire:

var result = ((Task<BookingListResponse>)tasks[0]).Result; 
+0

Ah, ça devrait le faire, merci à tous. :-) –

+0

Pas de problème, heureux de vous aider. Veuillez marquer comme accepté :) – Tom

+1

Encore mieux: pourquoi ne pas déclarer les tâches comme var tasks = new Liste >(); ? –

0
task.Result 

ou

tasks.First().Result 

devrait fonctionner