왜 그런 생각이 들지만, 누군가가 스레드 내부에서 발생 된 예외가 시작된 코드에 의해 결코 잡히지 않는 이유에 대해 잘 파악하고 있는지 묻고 싶습니다. 여기에 내가 무슨 뜻인지 설명하기 매우 간단한 코드입니다 :시도/캐치 및 스레딩
using System;
using System.Collections.Generic;
using System.Threading;
namespace TestCrash
{
class Program
{
private static void Crash(object control)
{
AutoResetEvent are = (AutoResetEvent)(((object[])control)[0]);
are.Set();
throw new Exception("Burn baby burn");
}
static void Main(string[] args)
{
try
{
List<WaitHandle> waitHandles = new List<WaitHandle>();
for (int i = 0; i < 100; i++)
{
AutoResetEvent are = new AutoResetEvent(false);
waitHandles.Add(are);
object[] procControl = new object[] { are };
ThreadPool.QueueUserWorkItem(Crash, procControl);
WaitHandle.WaitAll(waitHandles.ToArray());
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
내가 순진은 try/캐치를함으로써 내가 안전 할 것이라고 생각하지만, 나는 그것이 사건이 아니라고 하드 방법을 발견은 (는 충돌입니다 내 서비스 중 하나).
이상한, 지금 막 비슷한 스레드를 시작하려고했습니다. –
확실한 ive는 호출 스레드에 예외를 버블시킵니다. Altho는 ThreadPool을 사용하지 않습니다. just Thread T = 새 스레드 (새 ThreadStart (대리자() {Console.WriteLine ("충돌!"); DoCrashyThingy();}))); T.Start(); – Fusspawn
나는 그것에 대해 쉽게 잘못 될 수있다, 나의 일의 대부분은이 무시 무시한 싱글 스레드 거물이다 .. – Fusspawn