Gjelder for
.NET Framework 4.6.1

Symptomer

.NET Framework 4.6 lagt til en ny type opplistingsverdi, RunContinuationsAsynchronously, TaskCompletionSource og TaskCreationOptions -enumeratorer. Denne verdien tvinger oppgaver skal kjøres asynkront, og dette bidrar til å unngå situasjoner i vranglås. Imidlertid er oppdaget et problem der, for noen bestemte typer continuations (i bestemt når du oppretter continuations Task.WhenAll, Task.WhenAnyeller TaskExtensions.Unwrap ), alternativet ignoreres. Derfor av continuations kan fortsatt kjøre synkront.Følgende eksempel viser problemet. Hvis RunContinuationsAsynchronously -verdi ble fungerer som skal, vil to tråden IDer som skrives ut aldri være den samme, fordi løpende vil alltid bli planlagt på forskjellige tråder.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(); }}

Oppløsning

Det finnes for øyeblikket ingen løsning for dette problemet. Microsoft .NET Framework-teamet arbeider med en løsning som skal inkluderes i en fremtidig oppdatering.

Trenger du mer hjelp?

Vil du ha flere alternativer?

Utforsk abonnementsfordeler, bla gjennom opplæringskurs, finn ut hvordan du sikrer enheten og mer.