Κλάση εργασίας
Η κλάση Task είναι μια αφαίρεση ασύγχρονης λειτουργίας που παρέχεται μετά το .NET 4.0, με την πλήρη διαδρομή προς το System.Threading.Tasks.Task.
Η κλάση Task χρησιμοποιείται για την αναπαράσταση ασύγχρονων λειτουργιών χωρίς τιμή επιστροφής και για ασύγχρονες λειτουργίες με τιμές επιστροφής, θα πρέπει να χρησιμοποιείται η υποκλάση Task της κλάσης Task<TResult>. Οι εργασίες που δημιουργούνται από την κλάση Task προστίθενται στο χώρο συγκέντρωσης νημάτων.
<TResult>Οι κύριοι κατασκευαστές της κλάσης Εργασία/Εργασία είναι οι εξής:
Μόλις δημιουργηθεί, η εργασία μπορεί να ξεκινήσει χρησιμοποιώντας τη μέθοδο Start():
Στην πραγματική ανάπτυξη, η στατική μέθοδος Run() της κλάσης Task ή η μέθοδος μέλους StartNew() της εργοστασιακής κλάσης TaskFactory χρησιμοποιούνται συχνότερα για τη δημιουργία και την έναρξη νέων εργασιών.
Μερικές κοινές μέθοδοι στην κλάση Task:
λέξη-κλειδί async/await
Η C# 5.0 εισήγαγε τις λέξεις-κλειδιά async και await, οι οποίες παρείχαν καλύτερη υποστήριξη για ταυτοχρονισμό σε επίπεδο γλώσσας.
Το async χρησιμοποιείται για την επισήμανση ασύγχρονων μεθόδων: Η ασύγχρονη λέξη-κλειδί είναι μια λέξη-κλειδί με βάση τα συμφραζόμενα και θα αντιμετωπίζεται μόνο ως λέξη-κλειδί κατά την τροποποίηση μιας μεθόδου και ενός λάμδα και θα αντιμετωπίζεται ως αναγνωριστικό σε άλλες περιοχές. Η λέξη-κλειδί async μπορεί να επισημάνει στατικές μεθόδους, αλλά όχι σημεία εισόδου (μέθοδοι Main()).
Η επιστρεφόμενη τιμή της μεθόδου με ετικέτα async πρέπει να είναι <TResult>μία από τις Εργασία, Εργασία ή void. Το Await χρησιμοποιείται για να περιμένει το αποτέλεσμα της ασύγχρονης μεθόδου:
Η λέξη-κλειδί αναμονής είναι επίσης μια λέξη-κλειδί με βάση τα συμφραζόμενα και θεωρείται λέξη-κλειδί μόνο στη μέθοδο ασύγχρονης ετικέτας. Η λέξη-κλειδί αναμονής μπορεί να χρησιμοποιηθεί πριν από την ασύγχρονη μέθοδο και την Εργασία και <TResult>την Εργασία, για να περιμένετε το τέλος της ασύγχρονης εκτέλεσης της εργασίας. Μια απλή δομή ασύγχρονης μεθόδου είναι η εξής:
Δεν είναι ότι η μέθοδος επισημαίνεται με την ασύγχρονη λέξη-κλειδί, είναι μια ασύγχρονη μέθοδος και οι δηλώσεις που εμφανίζονται απευθείας μέσα στην ασύγχρονη μέθοδο εκτελούνται επίσης συγχρονισμένα,Το περιεχόμενο που εκτελείται ασύγχρονα πρέπει να εκτελεστεί χρησιμοποιώντας την κλάση Task。 Στην πραγματικότητα, μια ασύγχρονη μέθοδος που δεν περιέχει εντολές αναμονής θα εκτελεστεί συγχρονισμένα, οπότε ο μεταγλωττιστής θα δώσει μια προειδοποίηση.
Απλό παράδειγμα, χρησιμοποιώντας το async/wait για την ταυτόχρονη έξοδο περιεχομένου στην οθόνη:
Έξοδος: (Mono 4.4.0 && ArchLinux x64)
Δεν είναι δύσκολο να δούμε από το παραπάνω πρόγραμμα ότι στην ασύγχρονη λέξη-κλειδί με ετικέτα ασύγχρονης μεθόδου, ο κώδικας πριν από τη χρήση του wait εκτελείται συγχρονισμένα και μετά την κλήση του await, ο υπόλοιπος κώδικας εκτελείται ασύγχρονα σε ξεχωριστό νήμα.
|