Pazīmes
.NET Framework 4.6 pievienot jaunu uzskaitījuma ierakstiet vērtību, RunContinuationsAsynchronously, TaskCompletionSource un TaskCreationOptions uzskaitījums. Šī vērtība liek darboties asinhroni uzdevumi un tas palīdz izvairīties no Strupsaķere situācijās. Tomēr ir atklājis problēmu, kādu konkrētu veidu turpinājumi (it īpaši, ja Task.WhenAll, Task.WhenAnyvai TaskExtensions.Unwrap izveidot turpinājumi) opcija tiek ignorēta. Tādēļ turpinājumi var joprojām darboties sinhroni.Šādi piemēri parāda problēma. RunContinuationsAsynchronously vērtību pareizu darbību, ja divas pavedienu ID, kas tiek izdrukāts paliks tāds pats, jo turpināšanas vēlaties ieplānot vienmēr uz citu pavedienu.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(); }}
Risinājums
Pašlaik šai problēmai nav risinājuma. Microsoft .NET Framework darba grupa strādā risinājums ietver nākotnes atjauninājumu.