Nếu bạn tạo một Nhiệm vụ và bạn không bao giờ gọi task.Wait()
hoặc cố gắng truy xuất kết quả của a Task<T>
, khi tác vụ được thu thập bởi bộ thu gom rác, nó sẽ hủy ứng dụng của bạn trong quá trình hoàn thiện. Để biết chi tiết, hãy xem trang của MSDN về Xử lý Ngoại lệ trong TPL .
Lựa chọn tốt nhất ở đây là "xử lý" ngoại lệ. Điều này có thể được thực hiện thông qua một phần tiếp theo - bạn có thể đính kèm phần tiếp theo cho nhiệm vụ và ghi nhật ký / nuốt / vv ngoại lệ xảy ra. Điều này cung cấp một cách rõ ràng để ghi nhật ký các trường hợp ngoại lệ của nhiệm vụ và có thể được viết dưới dạng một phương thức mở rộng đơn giản, tức là:
public static void LogExceptions(this Task task)
{
task.ContinueWith( t =>
{
var aggException = t.Exception.Flatten();
foreach(var exception in aggException.InnerExceptions)
LogException(exception);
},
TaskContinuationOptions.OnlyOnFaulted);
}
Với những điều trên, bạn có thể ngăn bất kỳ tác vụ nào phá vỡ ứng dụng và ghi lại nó, thông qua:
Task.Factory.StartNew( () =>
{
// Do your work...
}).LogExceptions();
Ngoài ra, bạn có thể đăng ký TaskScheduler.UnobservedTaskException và xử lý nó ở đó.
Off
trong một lớp có tên là từ gồm bốn chữ cái mà bạn chọn và sử dụng phương thức này cho các liên tục về tổng hợp của bạn. Giúp chống lại một số sự thất vọng bị dồn nén từ ngoại lệ cụ thể này.