私が書きたいコードに例外をスローするためのC#での良い方法はありますが、このようなものです:私は、スレッドBは、定期的に確認することができます知っている指定されたスレッド
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.
}
}
、スレッドセーフな方法で、スレッドAによってフラグがセットされているかどうかを調べるが、それはコードをより複雑にする。私が使用できるより良い仕組みがありますか?あなたが別のものを見つける必要があることを、スレッドと同類を中止ように、他のメカニズムによってスレッドにスローされる例外との十分な問題がある
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.
}
}
ことが可能であったならばすごいああ、あなたはそれが可能であっても、単純な加算例外がスローされるで見ることを期待すべきです。 – Dykam