RunContinuationsAsynchronously δεν εκτελείται ασύγχρονα continuations

ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο έχει μεταφραστεί χρησιμοποιώντας λογισμικό μηχανικής μετάφρασης της Microsoft και μπορείτε να το διορθώσετε χρησιμοποιώντας την τεχνολογία Community Translation Framework (CTF) (Πλαίσιο μετάφρασης κοινότητας). Η Microsoft παρέχει μηχανική μετάφραση, επεξεργασία μετά τη μηχανική μετάφραση από την κοινότητα και άρθρα μεταφρασμένα από επαγγελματίες προκειμένου να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής βάσης σε πολλές γλώσσες. Τα άρθρα μηχανικής μετάφρασης και αυτά που επεξεργάζονται ύστερα από μηχανική μετάφραση ενδέχεται να περιέχουν σφάλματα στο λεξιλόγιο, στη σύνταξη ή/και στη γραμματική. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες μας. Για περισσότερες πληροφορίες σχετικά με το CTF, μεταβείτε στην τοποθεσία http://support.microsoft.com/gp/machine-translation-corrections/el.

Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη: 3118695
Συμπτώματα
Το 4.6 του .NET Framework προστεθεί μια νέα τιμή τύπου απαρίθμησης, RunContinuationsAsynchronously, το TaskCompletionSource και TaskCreationOptionsοι απαριθμήσεις. Η τιμή αυτή επιβάλλει την ασύγχρονη εκτέλεση των εργασιών και με αυτόν τον τρόπο για να αποφευχθούν περιπτώσεις αδιεξόδου. Ωστόσο, έχει εντοπιστεί ένα ζήτημα όπου, για ορισμένα συγκεκριμένα είδη continuations (ιδίως να δημιουργήσετε το continuationsTask.WhenAll, Task.WhenAnyή TaskExtensions.Unwrap), παραβλέπεται η επιλογή. Επομένως, ενδέχεται να εξακολουθεί να εκτελέσετε τη σύγχρονη continuations.

Το ακόλουθο δείγμα εμφανίζει το πρόβλημα. Εάν η τιμή RunContinuationsAsynchronouslyλειτουργεί σωστά, το νήμα δύο αναγνωριστικά που έχουν εκτυπωθεί ποτέ θα το ίδιο, επειδή η συνέχιση πάντα προγραμματιστεί σε διαφορετικά νήματα.

using System;using System.Threading;using System.Threading.Tasks; class Program{    static void Main()    {        var mres = new ManualResetEventSlim();         Console.WriteLine(Environment.CurrentManagedThreadId);         var tcs = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);         var t = Task.WhenAll(tcs.Task);         t.ContinueWith(delegate        {            Console.WriteLine(Environment.CurrentManagedThreadId);            mres.Set();        }, TaskContinuationOptions.ExecuteSynchronously);         tcs.SetResult(true);        mres.Wait();    }}

Προτεινόμενη αντιμετώπιση
Αυτήν τη στιγμή δεν υπάρχει λύση για αυτό το θέμα. Η ομάδα Framework .NET με Microsoft λειτουργεί με μια λύση για να συμπεριλάβετε σε μια μελλοντική ενημερωμένη έκδοση.


Προειδοποίηση: Αυτό το άρθρο έχει μεταφραστεί αυτόματα

Eigenschaften

Artikelnummer: 3118695 – Letzte Überarbeitung: 11/24/2015 18:12:00 – Revision: 1.0

Microsoft .NET Framework 4.6.1

  • kbsurveynew kbexpertiseadvanced kbtshoot kbmt KB3118695 KbMtel
Feedback