2011-01-02 31 views
7

Tôi cần giải thích về một số lời khuyên tôi có trên trang web này. Tôi đang làm một bản tin gửi ứng dụng, và tôi có thư của tôi được gửi trong một chủ đề riêng biệt để quá trình không làm chậm toàn bộ trang web. Một vài người khuyên tôi thiết lập thuộc tính IsBackground thành true. Tôi đã làm điều này, nhưng cũng rất can đảm về điều này, vì vậy tôi googled một chút. Khi nó quay ra, thiết lập các IsBackground bất động sản chỉ ra rằng "nó okay nếu quá trình tắt trong khi chủ đề này vẫn còn chạy.". Hoặc như microsoft đặt nó "Bất kỳ chủ đề nền còn lại được dừng lại và không hoàn thành."Đặt chủ đề làm nền hoặc không

Tôi không biết nếu tôi có được cách này sai, nhưng nó sẽ không tốt hơn để rời khỏi bất động sản IsBackground để sai, để các chủ đề sinh sản có thể hoàn thành công việc của mình liên quan đến chủ đề chính?

+0

Bạn gửi email ở đâu? – SLaks

+0

từ trang web, tôi tạo đối tượng mailmessage và smtpclient và lặp qua email từ db và gửi từng cái một – Andrej

Trả lời

5

Nếu bạn đặt "IsBackground = true", bạn đang đánh dấu chuỗi là không cần thiết - vì vậy nếu bạn muốn công việc nền hoàn thành ngay cả khi trang web bị hỏng, tôi nghĩ trực giác của bạn là chính xác, hãy để nó là "IsBackground = false ".

Điều này không dễ dàng; chủ đề sinh ra vẫn là con của chủ đề chính, do đó, tùy thuộc vào cách trang web đi xuống, nó vẫn có thể làm giảm toàn bộ quá trình. Nếu bạn thực sự muốn chắc chắn rằng công việc của bạn có thể chạy để hoàn thành bất kể điều gì xảy ra với chính trang đó, bạn nên suy nghĩ về việc giải nén nó vào quy trình riêng của nó, chẳng hạn như dịch vụ WCF.

0

Có vẻ như chủ đề này có một cái gì đó tương tự như:

while(true) 
{ 
    //do something 
} 

Nếu chủ đề này sẽ không được hủy bỏ khi quá trình cố gắng đi xuống quá trình này sẽ ở lại (Trừ khi bạn giết nó buộc).
Mặt khác, một chuỗi mặt đất trở lại sẽ tự động bị hủy bỏ khi tất cả các luồng tiền cảnh của tiến trình đi xuống.

+0

có, nó sẽ gửi email WHILE có email trong mảng (sử dụng vòng lặp while) .. vì vậy nếu tôi không đặt thuộc tính IsBackground là true, nó sẽ tiếp tục chạy khi vòng lặp kết thúc? – Andrej

+0

Không, khi phương pháp mà bạn chuyển đến Thread.Start thoát khỏi chuỗi cũng thoát. –

Các vấn đề liên quan