J'essaie d'utiliser la bibliothèque de tâches parallèle NET 4.0 pour gérer plusieurs requêtes FTS. Si la requête prend trop de temps, je veux l'annuler et poursuivre le traitement du reste.Annulation de tâches longues dans PLINQ
Ce code ne s'arrête pas lorsqu'une requête dépasse le seuil. Je pense que je l'appelle de telle sorte que la tâche d'annulation et la limite de temps est atteinte pour l'ensemble du processus plutôt que pour la transaction unique. Si je règle la période de temps à être très petite (300ms), alors il est appelé pour toutes les chaînes de recherche.
Je pense qu'il me manque quelque chose d'évident .. merci d'avance pour toute idée.
En outre, cela ne semble toujours pas empêcher l'exécution de la très longue requête. Est-ce la bonne façon d'annuler une requête en cours une fois déclenchée?
code modifié:
CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken token = cts.Token;
var query = searchString.Values.Select(c =>myLongQuery(c)).AsParallel().AsOrdered()
.Skip(counter * numToProcess).Take(numToProcess).WithCancellation(cts.Token);
new Thread(() =>
{
Thread.Sleep(5000);
cts.Cancel();
}).Start();
try
{
List<List<Threads>> results = query.ToList();
foreach (List<Threads> threads in results)
{
// does something with data
}
} catch (OperationCanceledException) {
Console.WriteLine("query took too long");
}
peut-être que je suis misparsing, mais il semble que vous parallélisation trop bas - que vous voudriez (si je comprends bien le code) faire la parallélisme dans le code appelant afin que vous exécutiez les appels X getSearchResults différents en parallèle au lieu de le faire dans la méthode getSearchResults puisque vous essayez AsParallel après l'opération myLongSearchQuery (vraisemblablement en série) –
J'ai déplacé mon parallélisme dans la chaîne. mais les longues requêtes ne sont toujours pas annulées. Cela ne devrait-il pas fonctionner conceptuellement? –
Lorsque vous annulez l'exécution des threads en cours d'exécution, l'annulation s'arrête uniquement aux nouveaux threads démarrés. – CityView