Tôi cần phải thông báo một chuỗi công nhân được gọi là ngừng hoạt động ở tính khả thi tiếp theo. Hiện tại tôi đang sử dụng một cái gì đó như thế này:Các tùy chọn để thông báo cho một Chủ đề dừng lại
public void Run()
{
while (!StopRequested)
DoWork();
}
Tôi lo ngại rằng StopRequested đang được đặt thành True trên một chuỗi khác. Điều này có an toàn không? Tôi biết tôi không thể khóa một boolean. Có lẽ có một cách khác nhau để thông báo cho một sợi rằng dừng là bắt buộc. Ví dụ tôi sẽ rất vui khi kiểm tra Thread.CurrentThread.ThreadState == ThreadState.StopRequested
nhưng không rõ làm thế nào tôi có thể thiết lập trạng thái luồng như vậy.
Tại sao bạn không thể khóa xung quanh một boolean? Nó thường được coi là thực hành tốt để tạo ra một 'Object' riêng biệt cho bất kỳ ổ khóa, dù sao đi nữa. –
Tôi không thể khóa bool vì 'một loại giá trị - tôi có thể tạo ra một đối tượng đồng bộ được gọi là không có mục đích khác hơn là khóa nó khi nhận/thiết lập cờ bool --- nhưng dường như với tôi trên một bool nên được an toàn, và ít nhất Reed Copsey đồng ý –
Vâng, khóa xung quanh một bool nên được an toàn. Hủy hợp tác. Backgroundworker hỗ trợ một khái niệm tương tự nếu nó phù hợp với nhiệm vụ bạn đang thực hiện. –