.NET 4 bevat een nieuwe naamruimte, System.Threading.Tasks, die klassen bevat die threadingfunctionaliteit abstraheren. Gebruik ThreadPool op de achtergrond. Een taak vertegenwoordigt het werk van een eenheid die voltooid moet worden. Het werk van deze eenheid kan in een aparte thread worden uitgevoerd of een taak kan synchroon worden gestart, wat wachten vereist op de hoofd-tuning thread. Het gebruik van taken geeft je niet alleen een abstractielaag, maar ook veel controle over de onderliggende threads. Taken bieden veel flexibiliteit bij het plannen van het werk dat gedaan moet worden. Je kunt bijvoorbeeld een continue taak definiëren – welk werk er moet worden gedaan nadat een taak is voltooid. Dit kan het verschil maken tussen een succesvolle klus en niet. Daarnaast kunnen taken in een hiërarchie worden gerangschikt. Bijvoorbeeld, een oudertaak kan een nieuwe kindtaak aanmaken. Dit creëert een afhankelijkheid zodat als je de oudertaak annuleert, ook de kindtaak wordt geannuleerd.
Tegenwoordig is het populair om taakuitvoeringsmethoden te gebruiken, en het levert hoge prestaties op, en ik weet niet waar de taakprestaties zijn.
Ik heb Task en Thread zelf getest, en ik vind dat Task erg traag is, wat de prestaties sterk beïnvloedt, en de testcode is als volgt:
We lopen de methode 1000 keer in een lus, waarna de methode 100 milliseconden blokkeert, en het testresultaat is als volgt:
Resultaat:
De uitvoering van de thread duurt 188 milliseconden
De uitvoering van de taak duurt 14.671 milliseconden
Het snelheidsverschil tussen de twee is 78 keer zo groot!!
De taak is erg traag, ik weet niet waarom dit gebeurt, is er iets mis met mijn testcode, of wat? Ik hoop dat je kunt uitleggen waarom dit gebeurt...
|