Всем привет!
Продолжая дискуссию на афтепати про то, проглатывается ли исключение в
потоке, привожу пруфлинк (VS 2010):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ThreadExceptions
{
class Program
{
static void Main(string[] args)
{
Console.Out.WriteLine("1 -
ThreadPool.QueueUserWorkItem()");
Console.Out.WriteLine("2 - Thread.Start() (IsBackground =
false)");
Console.Out.WriteLine("3 - Thread.Start() (IsBackground =
true)");
Console.Out.Write("Select case (1-3): ");
int i = Convert.ToInt32(Console.ReadLine());
Console.Out.WriteLine("i = {0}", i);
new List<Action> {Do1, Do2, Do3}[i -1]();
Console.ReadLine();
}
private static void Do1()
{
ThreadPool.QueueUserWorkItem(_ => { throw new
Exception(); }, null);
}
private static void Do2()
{
var thread = new Thread(() => { throw new Exception(); });
thread.IsBackground = false;
thread.Start();
}
private static void Do3()
{
var thread = new Thread(() => { throw new Exception(); });
thread.IsBackground = true;
thread.Start();
}
}
}
У меня все три метода наглухо падают. Вариант с таймером не привожу,
потому что там используется тот же ThreadPool.
Мысли MS по этому поводу тут:
http://j.mp/hPa3Dy