RunContinuationsAsynchronously non viene eseguito in modo asincrono le continuazioni

IMPORTANTE: il presente articolo è stato tradotto tramite un software di traduzione automatica di Microsoft ed eventualmente revisionato dalla community Microsoft tramite la tecnologia CTF (Community Translation Framework) o da un traduttore professionista. Microsoft offre articoli tradotti manualmente e altri tradotti automaticamente e rivisti dalla community con l’obiettivo di consentire all'utente di accedere a tutti gli articoli della Knowledge Base nella propria lingua. Tuttavia, un articolo tradotto automaticamente, anche se rivisto dalla community, non sempre è perfetto. Potrebbe contenere errori di vocabolario, di sintassi o di grammatica. Microsoft declina ogni responsabilità per imprecisioni, errori o danni causati da una traduzione sbagliata o dal relativo utilizzo da parte dei clienti. Microsoft aggiorna frequentemente il software e gli strumenti di traduzione automatica per continuare a migliorare la qualità della traduzione.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 3118695
Sintomi
Il 4.6 di.NET Framework consente di aggiungere un nuovo valore di tipo enum, RunContinuationsAsynchronously, di enum TaskCompletionSource e TaskCreationOptions. Questo valore impone attività da eseguire in modo asincrono e questo consente di evitare situazioni di deadlock. Tuttavia, è stato individuato un problema in cui, per alcuni tipi specifici di continuazioni (in particolare quando le continuazioni di creareTask.WhenAll, Task.WhenAnyo TaskExtensions.Unwrap), l'opzione viene ignorata. Di conseguenza, le continuazioni possono comunque eseguire in modo sincrono.

Nell'esempio riportato di seguito viene illustrato il problema. Se il valore di RunContinuationsAsynchronouslysono stati funziona correttamente, i due thread ID che sono stampati mai saranno gli stessi, in quanto la continuazione sarà sempre programmata su thread diversi.

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

Risoluzione
È attualmente disponibile alcuna soluzione per questo problema. Il team i.NET Framework Microsoft sta lavorando su una soluzione in modo da includere in un aggiornamento futuro.


Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 3118695 - Ultima revisione: 11/25/2015 03:47:00 - Revisione: 1.0

Microsoft .NET Framework 4.6.1

  • kbsurveynew kbexpertiseadvanced kbtshoot kbmt KB3118695 KbMtit
Feedback