Necesito informar un llamado subproceso de trabajo para detener el trabajo en la siguiente oportunidad disponible. Actualmente estoy usando algo como esto:Opciones para informar a un subproceso para detener
public void Run()
{
while (!StopRequested)
DoWork();
}
La preocupación que tengo es que StopRequested se establece en True en un subproceso diferente. ¿Esto es seguro? Sé que no puedo bloquear un booleano. Quizás haya una manera diferente de informar a un hilo que se requiere una detención. Por ejemplo, me gustaría comprobar Thread.CurrentThread.ThreadState == ThreadState.StopRequested
pero no está claro cómo puedo configurar el estado del hilo como tal.
¿Por qué no puedes bloquear un booleano? En general, se considera una buena práctica crear un 'Objeto' separado para cualquier bloqueo, de todos modos. –
No puedo bloquear el bool porque es 'un tipo de valor: podría crear un objeto llamado sync con el único propósito de bloquearlo al obtener/configurar el indicador bool --- pero me parece que bloquea en un bool debería ser seguro, y al menos Reed Copsey está de acuerdo –
Sí, bloquear un bool debería ser seguro. Cancelación cooperativa. el Backgroundworker admite un concepto similar si es apropiado para la tarea que está realizando. –