El código que quiero escribir es como esto:¿Hay un buen método en C# para lanzar una excepción en un subproceso dado
void MethodOnThreadA()
{
for (;;)
{
// Do stuff
if (ErrorConditionMet)
ThrowOnThread(threadB, new MyException(...));
}
}
void MethodOnThreadB()
{
try
{
for (;;)
{
// Do stuff
}
}
catch (MyException ex)
{
// Do the right thing for this exception.
}
}
sé que puedo tener hilo B comprobar periódicamente, en forma segura hilo , para ver si el hilo A ha establecido una bandera, pero eso hace que el código sea más complicado. ¿Hay algún mecanismo mejor que pueda usar?
Aquí es un ejemplo más de pulpa de comprobación periódica:
Dictionary<Thread, Exception> exceptionDictionary = new Dictionary<Thread, Exception>();
void ThrowOnThread(Thread thread, Exception ex)
{
// the exception passed in is going to be handed off to another thread,
// so it needs to be thread safe.
lock (exceptionDictionary)
{
exceptionDictionary[thread] = ex;
}
}
void ExceptionCheck()
{
lock (exceptionDictionary)
{
Exception ex;
if (exceptionDictionary.TryGetValue(Thread.CurrentThread, out ex))
throw ex;
}
}
void MethodOnThreadA()
{
for (;;)
{
// Do stuff
if (ErrorConditionMet)
ThrowOnThread(threadB, new MyException(...));
}
}
void MethodOnThreadB()
{
try
{
for (;;)
{
// Do stuff
ExceptionCheck();
}
}
catch (MyException ex)
{
// Do the right thing for this exception.
}
}
Oh, wow, si eso era posible, usted debe esperar que sea posible ver a incluso una simple adición de una excepción a ser lanzado. – Dykam