Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 31433|Απάντηση: 5

[Πηγή] .net/c# Κλάση εργασιών με ασυγχρονισμό/αναμονή

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 20/10/2017 10:32:17 μ.μ. | | |
Κλάση εργασίας

Η κλάση 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, ο υπόλοιπος κώδικας εκτελείται ασύγχρονα σε ξεχωριστό νήμα.





Προηγούμενος:fsadf{:1_2:}
Επόμενος:RestSharp ένα. NET(C#) HTTP βοηθητικό στοιχείο κλάσης
Δημοσιεύτηκε στις 1/11/2017 7:57:12 μ.μ. |
Ρίξε μια ματιά, ρίξε μια ματιά, ρίξε μια ματιά
Δημοσιεύτηκε στις 29/1/2019 9:37:53 π.μ. |
Έψαξα για πολύ καιρό στο Baidu #ασύγχρονη Task Invoke()Βρέθηκα να στέκομαι όρθιοςΗ παραπάνω μέθοδος χρησιμοποιεί την ασύγχρονη λέξη-κλειδί για να επιστρέψει μια μέθοδο Invoke της κλάσης Task, η οποία λύνει επίσης το πρόβλημα του νήματος, ποιο είναι το νόημα όλης αυτής της συνάρτησης;
Δημοσιεύτηκε στις 29/1/2019 9:14:36 μ.μ. |
Αυτό είναι πραγματικά καλό, και θα γράψω μια τέτοια κοινοποίηση όταν έχω χρόνο
Δημοσιεύτηκε στις 15/2/2019 4:17:22 μ.μ. |
Το αποτέλεσμα εξόδου δεν μπορεί να δει καθαρά το αποτέλεσμα της ασύγχρονης εκτέλεσης και η ασύγχρονη είσοδος θα πρέπει να είναι ταυτόχρονη
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com