Disons que nous avons un programme suivant où, dans sa méthode Start, il délègue une tâche longue à un autre thread. Lorsque la méthode Stop est appelée, je dois m'assurer que le thread de travail termine l'exécution de la tâche en cours et ne la laisse pas au milieu. S'il a déjà terminé la tâche et est en état de veille, il peut alors s'arrêter immédiatement.Attendre que le thread principal s'arrête jusqu'à ce qu'une tâche soit traitée par un thread asynchrone
S'il vous plaît me guider sur la façon dont je devrais le faire.
static int itemsProcessed = 0;
static Thread worker;
static void Start()
{
var ts = new ThreadStart(Run);
worker = new Thread(ts);
worker.Start();
}
static void Stop()
{
//wait until the 'worker' completes processing the current item.
Console.WriteLine("{0} Items Processed", itemsProcessed);
}
static void Run(object state)
{
while (true)
{
ALongRunningTask();
itemsProcessed++;
Thread.Sleep(1000);
}
}
Cela doit être traité pour être volatile, sinon l'autre thread peut ne jamais remarquer que la valeur est modifiée. Vous pouvez également utiliser la méthode worker.Join au lieu de la boucle de veille. –
les deux déclarations correctes, je reçois un prototypage bâclé. J'ai édité mon post – BrokenGlass