RunContinuationsAsynchronously ei tööta continuations asünkroonselt

NB! Artikkel on tõlgitud Microsofti masintõlketarkvaraga ja seda saab parandada Kogukonnapõhise tõlkeraamistiku (CTF) tehnoloogiaga. Microsoft pakub masintõlgitud, kogukonna järeltöödeldud ja inimtõlgitud artikleid, et anda mitmekeelne juurdepääs kõigile meie teabebaasi artiklitele. Masintõlgitud ja järeltöödeldud artiklites võib olla sõnavara-, süntaksi- ja/või grammatikavigu. Microsoft ei vastuta mingite ebatäpsuste, tõrgete ega kahjude eest, mis on tulenenud sisu valest tõlkest või selle kasutamisest meie klientide poolt. Lisateavet CTF-i kohta leiate aadressilt http://support.microsoft.com/gp/machine-translation-corrections/et.

Artikli ingliskeelse versiooni kuvamiseks klõpsake siin: 3118695
Sümptomid
.NET Frameworki 4.6 lisatud uus enum tippige väärtus, RunContinuationsAsynchronouslyTaskCompletionSource ja TaskCreationOptionsvariandid. See väärtus sunnib ülesanded käivitamiseks asünkroonselt ja see aitab vältida tupik. Siiski on avastatud probleemi, kus mõned teatud tüüpi continuations (eriti kuiTask.WhenAll, Task.WhenAnyvõi TaskExtensions.Unwraploomine ning continuations) võimalust ignoreeritakse. Seetõttu continuations võib ikka sünkroonselt.

Järgmine näide näitab probleemi. Kui RunContinuationsAsynchronouslyväärtus ei tööta korralikult, oleks kaks jutulõnga ID-ga välja printida sama, mitte kunagi sest jätkamine oleks alati ajastatud peale erinevad teemad.

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

Lahendus
Praegu pole sellele probleemile lahendust. Microsoft .NET Frameworki meeskonna lahendus lisada tulevikus värskendust.


Hoiatus. See artikkel on masintõlgitud.

Atribuudid

Artikli ID: 3118695 – viimati läbi vaadatud: 11/24/2015 18:13:00 – redaktsioon: 1.0

Microsoft .NET Framework 4.6.1

  • kbsurveynew kbexpertiseadvanced kbtshoot kbmt KB3118695 KbMtet
Tagasiside