Der Code, den ich schreiben möchte, ist wie folgt:Gibt es eine gute Methode in C# für eine Ausnahme auf einem bestimmten Thread werfen
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.
}
}
ich weiß ich kann Thread B in regelmäßigen Abständen überprüfen, in thread sichere Weise haben , um zu sehen, ob ein Flag von Thread A gesetzt wurde, aber das macht den Code komplizierter. Gibt es einen besseren Mechanismus, den ich verwenden kann?
ist hier ein mehr konkretisierte Beispiel in regelmäßigen Abständen überprüft:
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, wenn das möglich war, sollten Sie es möglich, erwarten sogar bei einer einfachen Addition zu sehen, eine Ausnahme ausgelöst werden. – Dykam