2010-06-13 4 views
1

Je dois créer une application qui démarrera plusieurs fois par jour (elle est non interactive). Pour fonctionner, il a besoin de grandes quantités de données provenant d'Internet (mégaoctets) via une connexion plutôt lente, de sorte que les appels de service WCF prennent beaucoup de temps.Workflow Foundation: Opérations asynchrones (E/S réseau longues)

Dans le même temps, il doit effectuer des calculs locaux et dispose d'un processus d'initialisation sophistiqué. Donc, ce que je veux faire est de créer un flux de travail qui récupère les données de manière asynchrone (prend quelques minutes) tout en initialisant/calculant localement.

Existe-t-il un moyen d'accomplir ceci?

Répondre

1

Vous pouvez utiliser le composant BackgroundWorker pour chaque opération asynchrone - une pour les calculs et une pour le téléchargement des données. Ma suggestion serait d'utiliser un fil pour chaque opération. Après avoir démarré chaque thread, appelez thread.Join() un chaque thread pour attendre la fin de chaque thread.

par exemple.

Thread[] workers = new Thread[2]; 
workers[0] = new Thread(dataDownloader.Fetch); 
workers[1] = new Thread(calculator.DoComplexCalculations); 

foreach(Thread t in workers) 
{ 
    t.Start(); 
} 
foreach(Thread t in workers) 
{ 
    t.Join(); 
} 
1

Vous pouvez générer les classes asynchrones de votre service wcf (à l'aide de commandlinetool). Si vous exécutez ces méthodes asynchrones, elles retournent immédiatement et appellent un délégué de rappel lorsqu'elles ont terminé. De cette façon, vous êtes libre de faire tous vos calculs pendant que vous attendez

Questions connexes