2012-05-25 10 views
5

mogę zabić .NET 4.0 Task object z jakiegoś sposobu jak mogliśmy ze starych i niebezpiecznych Thread.Abort() jak omówione w SO thread (pun przeznaczone i zapisać kociąt!)Zabicie zadania .NET 4?

Kenny

+0

powielony artykuł: http://stackoverflow.com/questions/4359910/is-it-possible-to-abb-a-task-like-aborting-a-readread-thread-abort-method – Kai

+0

Wiem, że to niebezpieczne , ale czy można to zrobić? Chyba mówisz "nie". – kenny

+0

@kenny Nie bez dużej wiedzy o 'Zadaniu' - Jeśli wiedziałeś wcześniej, że użyty' TaskScheduler' używał dedykowanego wątku dla 'Task', możesz wywołać' Abort' w tym wątku. Biorąc to pod uwagę, byłoby BARDZO złym pomysłem zaprojektować system w ten sposób. –

Odpowiedz

2

Klasa Task jest zaprojektowany i przeznaczony , aby użyć nowej wersji Cooperative Cancellation model .NET 4 zamiast polegać na destruktywnym stylu "anulowania" anulowania.

Nie ma bezpośredni sposób anulować Task (jak Thread.Abort(), choć to bardzo złedo wykorzystania w każdym przypadku), ale istnieje cały ramy w celu zapewnienia narzędzi do request that the Task cancel itself.

+1

Tak, widziałem, że CancelationTokenSource i metoda współpracy, jak to zrobić, ale mam przypadek, w którym muszę przerwać zadanie (rozmawiając z sprzętowym interfejsem API innej firmy) i jestem skłonny przejść niestabilność, aby to zrobić . Dzięki jeszcze raz!. – kenny

+0

@kenny Nie ma mechanizmu w 'Zadanie', aby na to pozwolić. –

+0

Ok dzięki, będę musiał użyć przestarzałego obiektu Thread. – kenny