Conectați-vă cu Microsoft
Conectați-vă sau creați un cont.
Salut,
Selectați un alt cont.
Aveți mai multe conturi
Alegeți contul cu care doriți să vă conectați.

Simptome

.NET Framework 4.6 adaugă o nouă valoare de tip enumerare, RunContinuationsAsynchronously, TaskCompletionSource și TaskCreationOptions enumerare. 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ând Task.WhenAll, Task.WhenAnysau TaskExtensions.Unwrap crea continuări), opțiunea este ignorat. Prin urmare, continuări încă poate executa sincron.

Următorul exemplu Arată problema. Dacă valoarea RunContinuationsAsynchronously au fost funcționează corect, firul două ID-uri care sunt imprimate nu ar fi la fel, deoarece continuarea ar fi întotdeauna programate 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();
}
}

Rezolvare

Î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.


Aveți nevoie de ajutor suplimentar?

Extindeți-vă competențele

Explorați instruirea >

Fiți primul care obține noile caracteristici

Alăturați-vă la Microsoft Insider >

Au fost utile aceste informații?

Cât de mulțumit sunteți de calitatea limbajului?
Ce v-a afectat experiența?

Vă mulțumim pentru feedback!

×