내가 쓰고 싶은 코드에서 예외를 throw위한 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