J'ai une méthode dans laquelle je ne contrôle pas (supposons qu'il vient d'une autre bibliothèque):Existe-t-il un moyen d'annuler une tâche C# non annulable sans attendre le délai si la tâche se termine plus tôt?
private static void DoWork()
{
// I have no control over this method
while (true)
{
Console.WriteLine("Still working");
}
}
Et je veux attendre un peu de temps (par exemple 20 secondes) et si le travail n'est pas fini dans ce temps d'arrêter le code.
Ce que j'ai essayé jusqu'à présent:
modèle utilisant la tâche d'annulation n'est pas une option pour moi parce que je ne contrôle pas la méthode que je suis exécutais
En utilisant seulement la
Task
classe n'est pas une option parce que je ne peux pas arrêter l'exécution de la tâche sans utiliser annulation jetonvar taskToWaitAndKill = Task.Factory.StartNew(DoWork); taskToWaitAndKill.Wait(20000); // 20 seconds // The task cannot be stopped (aborted) and still runs...
aide la classe
Thread
, l'attendre et l'abandonner n'est pas une option car j'ai besoin d'attendre les 20 secondes avant d'arrêter le code.var thread = new Thread(DoWork); thread.Start(); Thread.Sleep(20000); thread.Abort();
Ma question est-il un moyen en C# attendre nombre fixe de millisecondes pour un code d'exécution et si le code se termine plus tôt de ne pas attendre plus longtemps?
Doit-on annuler l'opération? Ou peut-il continuer en arrière-plan pendant que vous reprenez votre travail? –
Voir [si cette réponse] (http://stackoverflow.com/a/25684549/1870803) aide. –