RunContinuationsAsynchronously nelze spustit pokračování asynchronně

DŮLEŽITÉ: Tento článek je přeložen pomocí softwaru na strojový překlad Microsoft. Nepřesný či chybný překlad lze opravit prostřednictvím technologie Community Translation Framework (CTF). Microsoft nabízí strojově přeložené, komunitou dodatečně upravované články, a články přeložené lidmi s cílem zajistit přístup ke všem článkům v naší znalostní bázi ve více jazycích. Strojově přeložené a dodatečně upravované články mohou obsahovat chyby ve slovníku, syntaxi a gramatice. Společnost Microsoft není odpovědná za jakékoliv nepřesnosti, chyby nebo škody způsobené nesprávným překladem obsahu nebo jeho použitím našimi zákazníky. Více o CTF naleznete na http://support.microsoft.com/gp/machine-translation-corrections/cs.

Projděte si také anglickou verzi článku: 3118695
Příznaky
4.6 rozhraní.NET Framework přidána nová hodnota výčtového typu, RunContinuationsAsynchronously, výčty TaskCompletionSource a TaskCreationOptions. Tato hodnota vynutí spuštění asynchronní úloh a tímto způsobem se vyhnete zablokování situace. Však problém zjištěno, kde pro některé specifické druhy pokračování (zejména přiTask.WhenAll, Task.WhenAnynebo TaskExtensions.Unwrapvytvořit pokračování), možnost je ignorována. Proto pokračování může spustit synchronně.

Následující ukázka představuje problém. Pokud hodnota RunContinuationsAsynchronouslybyly správně funguje, vlákno dva identifikátory, které jsou vytištěny by nikdy být stejné, protože pokračování by vždy měla být naplánováno na různých podprocesů.

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

Řešení
V současné době není žádné řešení tohoto problému. Rozhraní.NET Framework k Microsoft team pracuje na řešení k zahrnutí do budoucích aktualizací.


Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 3118695 - Poslední kontrola: 11/24/2015 18:11:00 - Revize: 1.0

Microsoft .NET Framework 4.6.1

  • kbsurveynew kbexpertiseadvanced kbtshoot kbmt KB3118695 KbMtcs
Váš názor