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

Άποψη: 58026|Απάντηση: 2

[Πηγή] Το ConcurrentDictionary υποστηρίζει νέες και ενημερωμένες ενημερώσεις

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 13/7/2016 11:12:05 π.μ. | | |
Περιβάλλον ανάπτυξης: .NET 4.0 ή νεότερη έκδοση

Σημείωση:
Ο χώρος ονομάτων System.Collections.Concurrent στο .NET Framework 4.
Όπως και στην τεκμηρίωση του MSDN, το ConcurrentDictionary υλοποιεί μια συλλογή ασφαλή για νήματα στην οποία μπορούν να έχουν πρόσβαση πολλά νήματα ταυτόχρονα.
Το ConcurrentDictionary υλοποιεί IDictionary<TKey, TValue> και διαθέτει μερικούς μοναδικούς μηχανισμούς για την προσθήκη, ενημέρωση κλειδιού/τιμής. (Παρακάτω είναι μια εξήγηση για το πότε και ποια μέθοδο να χρησιμοποιήσετε)

Σενάριο 1: Προσθέστε ένα νέο στοιχείο, μόνο εάν το κλειδί δεν υπάρχει στο λεξικό...
Χρησιμοποιήστε το TryAdd. Το TryAdd αποδέχεται το κλειδί και την τιμή που προστέθηκαν στο λεξικό, επιστρέφει fasle εάν το κλειδί δεν υπάρχει στο λεξικό. Επιστρέφει true εάν υπάρχει.
public bool TryAdd (κλειδί TKey, τιμή TValue)

Κατάσταση 2: Ενημερώστε το υπάρχον κλειδί στην Τιμή του λεξικού...
Χρησιμοποιήστε το TryUpdate. Εάν το λεξικό έχει αυτό το κλειδί και δίνει μια ενημέρωση υπό όρους, θα πρέπει να δώσει μια τιμή σύγκρισης σε αυτήν τη μέθοδο που μπορεί να ενημερωθεί όταν η τρέχουσα τιμή είναι ισοδύναμη με την τιμή σύγκρισης (TValue comparisonValue).
public bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue)


Κατάσταση 3: Ένα κλειδί/τιμή πρέπει να προστεθεί στο λεξικό. Εάν το κλειδί δεν είναι σίγουρο αν υπάρχει στο λεξικό. Εάν υπάρχει, ενημερώστε Εάν δεν υπάρχει, προσθέστε το...

Χρησιμοποιήστε το AddOrUpdate. Το AddOrUpdate έχει δύο υπερφορτώσεις και οι δύο υπερφορτώσεις επιστρέφουν την τιμή της τιμής:
Η πρώτη υπερφορτωμένη παράμετρος είναι η AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
Οι παράμετροι είναι Key και δύο αντιπρόσωποι. Ο σκοπός του πρώτου πληρεξούσιου είναι να αναθέσει όταν το κλειδί δεν υπάρχει και να επιστρέψει την τιμή (αρχική τιμή) Αυτή η συνάρτηση ανάθεσης επιστρέφει < αρχική τιμή, κλειδί>.
Ο δεύτερος πληρεξούσιος Func < επιστρέφει Value, key, oldValue> και εκτελεί τον πρώτο πληρεξούσιο εάν το κλειδί δεν υπάρχει στο λεξικό (εάν υπάρχει, δεν εκτελείται. Ο σκοπός είναι να δοθεί στην τιμή η αρχική τιμή) και στη συνέχεια θα επιστρέψει την τιμή (την αρχική τιμή της τιμής). Η δεύτερη ανάθεση είναι μια μέθοδος για την αλλαγή της τιμής τιμής, η οποία απαιτεί επίσης επιστρεφόμενη τιμή (αλλαγή της αρχικής τιμής στην τελική τιμή). Η συνάρτηση < επιστρέψει την > Value, key, oldValue
public TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)

                 2. Η παράμετρος της δεύτερης υπερφόρτωσης είναι AddOrUpdate (TKey, TValue, Func<TKey, TValue, TValue>)
Η πρώτη παράμετρος είναι το κλειδί, η δεύτερη είναι όταν το κλειδί δεν υπάρχει, αυτή η τιμή είναι η αρχική τιμή της τιμής και η τρίτη είναι ο πληρεξούσιος είναι να εκτελέσει την αλλαγή (Func< επιστρέφει Value, key, oldValue>).
                      public TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)

Κατάσταση 4: Προσθέστε την τιμή του κλειδιού στο λεξικό, αλλά εάν το κλειδί υπάρχει ήδη, αφαιρέστε την τιμή. Διαφορετικά, θα προστεθεί
Πρώτη υπερφόρτωση: GetOrAdd(TKEY, Func<TKey, TValue>valueFactory)
Η πρώτη παράμετρος είναι κλειδί, η δεύτερη παράμετρος είναι εκχωρημένη Func<τιμή, κλειδί>, όταν το κλειδί δεν υπάρχει, μια μεταβλητή μεταβιβάζεται ως κλειδί και η τιμή αλλάζει. και δημιουργήστε ένα κλειδί και μια τιμή, επιστρέφοντας μια τιμή τιμής.

       2. Δεύτερη υπερφόρτωση: GetOrAdd (TKEY, TValue)
Η πρώτη παράμετρος είναι το κλειδί και ο σκοπός της δεύτερης παραμέτρου είναι να δημιουργήσει μια νέα τιμή που δίνεται από το κλειδί όταν δεν υπάρχει. Επιστρέφει τιμή.
δημόσιο TValue GetOrAdd(TKEY,Func<TKey, TValue>valueFactory)
public TValue GetOrAdd(TKEY,TValue)


Κάθε λειτουργία του AddOrUpdate και του GetOrAdd είναι μια μέθοδος που διαθέτει το ConcurrentDictionary για την τροποποίηση/εγγραφή στο λεξικό, η οποία διασφαλίζει την ασφάλεια του νήματος (γίνεται με τρόπο χωρίς κλείδωμα, διαβάζοντας δεδομένα στο λεξικό).




Προηγούμενος:Ερώτημα πολλαπλών συνθηκών LINQ όπου κατασκευάζεται συνθήκη
Επόμενος:Windows κάτω από τις βασικές εντολές λειτουργίας Memcached
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 13/9/2016 1:33:25 μ.μ. |
ConcurrentDictionary vs. Dictionary+Locking - Ντένις Γκάο
http://www.itsvse.com/thread-3106-1-1.html
(Πηγή: Code Agriculture Network)
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 23/3/2021 11:32:18 π.μ. |
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com