7

Tôi biết cách xử lý ngoại lệ không được xử lý khi sử dụng Task s, chỉ ném một phần chưa được giải quyết trong finalizer nếu mã người dùng chưa 'quan sát' nó.Tại sao ngoại lệ chưa được xử lý trên chuỗi hẹn giờ không làm hỏng quá trình

Tôi cũng biết cách ngoại lệ chưa được xử lý trong chuỗi không đồng bộ (ví dụ: Action.BeginInvoke()) bị phát hiện và được ném lại vào cuộc gọi tham gia (ví dụ: Action.EndInvoke()).

Điều tôi không hiểu là cách điều này không làm hỏng quy trình?

static void Main(string[] args) 
    { 
     var timer = new System.Timers.Timer() {Interval = 100}; 
     timer.Elapsed += (o, e) => { throw new Exception(); }; 
     timer.Start(); 

     Console.ReadKey(true); 
    } 
+0

Vâng đây là 4-6 giờ trong cuộc sống của tôi, tôi sẽ không bao giờ quay lại. Thật là một quyết định khủng khiếp về phần của Microsoft cho việc này không sụp đổ. –

Trả lời

9

Từ các tài liệu .NET 4.0:

Trong khuôn khổ phiên bản .NET 2.0 trở về trước, các thành phần hẹn giờ sản lượng đánh bắt và ngăn chặn tất cả các trường hợp ngoại lệ ném bởi xử lý sự kiện cho sự kiện đã qua . Hành vi này có thể thay đổi trong các bản phát hành tương lai của Khuôn khổ .NET.

http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx

Không có tuyên bố chưa tuyên bố rằng hành vi này đã thực sự thay đổi.

+0

Ahh đó sẽ là nó, Cảm ơn - Tôi đã thực sự đọc trang đó, nhưng phải bỏ qua nó. Tôi nghĩ rằng tôi ngu ngốc giả định rằng một cái gì đó đi ngược lại tất cả các thực hành tiêu chuẩn của họ không đàn áp ngoại lệ unhandled sẽ có được bên trong một trong những hộp màu vàng đẹp. – Tyson

+0

@Tyson, đã đồng ý. Nó giới thiệu một sự mâu thuẫn xấu xí với những nơi khác. –