2011-01-02 14 views
7

Potrzebuję wyjaśnienia dotyczące niektórych porad, które mam na tej stronie. Robię aplikację do wysyłania biuletynów, a moja poczta jest wysyłana w osobnym wątku, więc proces nie spowalnia całej witryny. Kilka osób doradziło mi ustawić właściwość IsBackground wątków na true. Zrobiłem to, ale byłem również niezadowolony z tego, co to robi, więc trochę googlowałem. Okazuje się, że ustawienie właściwości IsBackground na wartość true oznacza, że ​​"wszystko w porządku, jeśli proces zostanie zamknięty, gdy wątek nadal działa.". Lub jako microsoft umieszcza je "Wszystkie pozostałe wątki tła są zatrzymywane i nie są kompletne."Ustaw wątek jako tło lub nie

Nie wiem, czy zrobiłem to w niewłaściwy sposób, ale czy nie byłoby lepiej pozostawić właściwość IsBackground fałszywym, tak aby zrodzony wątek mógł zakończyć pracę nad głównym wątkiem?

+0

Jak/gdzie wysyłasz e-maile? – SLaks

+0

ze strony internetowej, tworzę obiekt mailmessage i smtpclient i iteruję przez e-maile z db i wysyłam je jeden po drugim – Andrej

Odpowiedz

5

Jeśli ustawisz "IsBackground = true", oznaczasz wątek jako nieistotny - więc jeśli chcesz, aby Twoje zadanie w tle było kompletne, nawet jeśli witryna jest wyłączona, myślę, że twoja intuicja jest poprawna, zostaw jako "IsBackground = false ".

To nie jest niezawodny; Zrodzony wątek jest nadal dzieckiem głównego wątku, więc w zależności od tego, jak strona się obniży, może on jeszcze obniżyć cały proces. Jeśli naprawdę chcesz mieć pewność, że Twoje zadanie może się skończyć do końca, niezależnie od tego, co stanie się z witryną, powinieneś pomyśleć o wyodrębnieniu go do własnego procesu, takiego jak usługa WCF.

0

Brzmi jak tego wątku ma coś podobnego do:

while(true) 
{ 
    //do something 
} 

Jeśli ten wątek nie zostanie przerwana, gdy proces próbuje zejść proces będzie zatrzymać się (chyba, że ​​zabije go na siłę).
Z drugiej strony wątek z powrotem do ziemi zostanie automatycznie przerwany, gdy wszystkie wątki pierwszego planu procesu przestaną działać.

+0

tak, wysyła on e-maile PODCZAS istnienia e-maili w tablicy (używając pętli while) .. więc jeśli nie ustawić właściwość IsBackground na true, będzie działać po zakończeniu pętli? – Andrej

+0

Nie, gdy metoda przekazana do Thread.Start kończy się wątek również kończy działanie. –