Momentan sunteți offline, așteptați să vă reconectați la internet

RunContinuationsAsynchronously nu se execută continuări asincron

IMPORTANT: Acest articol este tradus cu ajutorul software-ului Microsoft de traducere automată și poate fi corectat prin intermediul tehnologiei Community Translation Framework (CTF). Microsoft oferă articole traduse automat, post-editate de comunitate și articole traduse de oameni, pentru a permite accesul la toate articolele din Baza noastră de cunoștințe în mai multe limbi. Articolele traduse automat și post-editate pot conține greșeli de vocabular, sintaxă și/sau gramatică. Microsoft nu este responsabil de inexactitățile, erorile sau daunele cauzate de traducerea greșită a conținutului sau de utilizarea acestuia de către clienți. Găsiți mai multe informații despre traducerea în colaborare la http://support.microsoft.com/gp/machine-translation-corrections/ro.

Faceți clic aici pentru a vizualiza versiunea în limba engleză a acestui articol: 3118695
Simptome
.NET Framework 4.6 adaugă o nouă valoare de tip enumerare, RunContinuationsAsynchronously, TaskCompletionSource și TaskCreationOptionsenumerare. Această valoare impune activități pentru a executa asincron, iar acest lucru ajută la evitarea blocare fatală situații. Cu toate acestea, s-a descoperit o problemă în cazul în care, pentru unele anumite tipuri de continuări (în special atunci cândTask.WhenAll, Task.WhenAnysau TaskExtensions.Unwrapcrea continuări), opțiunea este ignorat. Prin urmare, continuări încă poate executa sincron.

Următorul exemplu Arată problema. Dacă valoarea RunContinuationsAsynchronouslyau fost funcționează corect, firul două ID-uri care sunt imprimate nu ar fi la fel, deoarece continuarea întotdeauna ar fi programată pe diferitelor fire.

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();    }}

Rezoluţie
În prezent nu există nicio soluție pentru această problemă. Echipa Microsoft .NET Framework funcționează pe o soluție pentru a include într-o actualizare viitoare.


Avertisment: acest articol a fost tradus automat

Proprietăți

ID articol: 3118695 - Ultima examinare: 11/25/2015 05:43:00 - Revizie: 1.0

Microsoft .NET Framework 4.6.1

  • kbsurveynew kbexpertiseadvanced kbtshoot kbmt KB3118695 KbMtro
Feedback
sByTagName("head")[0].appendChild(m);