Tôi có một chương trình sử dụng một số chủ đề. Khi tôi hiểu nó, khi thread 0 thoát, toàn bộ chương trình thoát, bất kể bất kỳ chủ đề nào khác có thể vẫn đang chạy.Cách tốt nhất để thoát khỏi chương trình Haskell là gì?
Vấn đề là các chủ đề khác này có thể mở tệp. Đương nhiên, điều này được bao bọc trong mã xử lý ngoại lệ để đóng các tệp trong trường hợp có sự cố. Điều đó cũng có nghĩa là nếu tôi sử dụng killThread
(được triển khai qua throwTo
), tệp phải cũng đóng trước khi thoát khỏi chuỗi.
Câu hỏi của tôi là, nếu tôi chỉ cho phép thoát khỏi chuỗi 0, mà không cố gắng dừng các luồng khác, tất cả các trình xử lý tệp khác nhau có được đóng độc đáo không? Có bất kỳ đầu ra buffered được flushed?
Tóm lại, tôi có thể chỉ cần thoát hoặc tôi có cần phải tự xóa chuỗi trước không?
Tôi không muốn dựa vào 'killThread' hoặc' exit' để xóa các chủ đề khác cũng như vấn đề vệ sinh lập trình tốt. Tôi cụ tất cả các chủ đề của tôi để lắng nghe tín hiệu làm sạch từ sợi chính để tất cả chúng có thể được tắt một cách duyên dáng. –
Tại sao không thử? IME, hầu hết các hệ điều hành sẽ đóng các tập tin, (tức là không để lại xử lý, fd hoặc rò rỉ khác), nhưng xuất sắc I/O sẽ không được đỏ mặt. –
@GabrielGonzalez Nếu bạn làm theo cách đó, điều đó có nghĩa là một chuỗi sẽ chỉ chấm dứt tại một số điểm nhất định.Nếu bạn quên kiểm tra thường xuyên đủ, hoặc một cái gì đó mất nhiều thời gian hơn dự kiến, bạn có thể nhận được một tình huống mà bạn báo hiệu các chủ đề để chết, và nó không (hoặc chỉ mất một thời gian thực sự dài). Bạn cần phải xử lý ngoại lệ anyway, vậy tại sao không sử dụng 'killThread'? – MathematicalOrchid