Tôi có một ý tưởng tại sao nhưng tôi muốn hỏi liệu có ai đó có nắm bắt tốt về lý do ngoại lệ được nêu ra bên trong một chuỗi không bao giờ bị bắt bởi mã bắt đầu nó. Dưới đây là một số mã rất đơn giản để chứng minh những gì tôi muốn nói:Hãy thử/Catch và luồng
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);
}
}
}
}
Tôi ngây thơ nghĩ rằng bằng cách try/catch tôi sẽ được an toàn, nhưng tôi phát hiện ra cách cứng mà nó không phải là trường hợp (nó là đâm một trong những dịch vụ của tôi).
Lạ thật, tôi sắp bắt đầu một chủ đề tương tự. –
Im chắc chắn ive có bong bóng Ngoại lệ lên đến chuỗi đang gọi. Altho im không sử dụng ThreadPool. chỉ Chủ đề T = chủ đề mới (ThreadStart mới (delegate() {Console.WriteLine ("Crash!"); DoCrashyThingy();})); T.Start(); – Fusspawn
Tôi có thể dễ dàng bị sai lầm về điều đó, hầu hết công việc của tôi là kẻ thù độc ác ghê gớm này .. – Fusspawn