Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Classe TaskCompletionSource<TResult>

 

Data di pubblicazione: novembre 2016

Rappresenta il lato producer di un oggetto Task<TResult> non associato a un delegato, fornendo l'accesso al lato consumer tramite la proprietà Task.

Spazio dei nomi:   System.Threading.Tasks
Assembly:  mscorlib (in mscorlib.dll)

System.Object
  System.Threading.Tasks.TaskCompletionSource<TResult>

[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public class TaskCompletionSource<TResult>

Parametri tipo

TResult

Tipo del valore del risultato associato a questo oggetto TaskCompletionSource<TResult>.

NomeDescrizione
System_CAPS_pubmethodTaskCompletionSource<TResult>()

Crea un oggetto TaskCompletionSource<TResult>.

System_CAPS_pubmethodTaskCompletionSource<TResult>(Object)

Crea un oggetto TaskCompletionSource<TResult> con lo stato specificato.

System_CAPS_pubmethodTaskCompletionSource<TResult>(Object, TaskCreationOptions)

Crea un oggetto TaskCompletionSource<TResult> con lo stato e le opzioni specificate.

System_CAPS_pubmethodTaskCompletionSource<TResult>(TaskCreationOptions)

Crea un oggetto TaskCompletionSource<TResult> con le opzioni specificate.

NomeDescrizione
System_CAPS_pubpropertyTask

Ottiene l'oggetto Task<TResult> creato da questo oggetto TaskCompletionSource<TResult>.

NomeDescrizione
System_CAPS_pubmethodEquals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.(Ereditato da Object.)

System_CAPS_protmethodFinalize()

Consente a un oggetto di effettuare un tentativo di liberare risorse ed eseguire altre operazioni di pulizia prima che venga recuperato da Garbage Collection.(Ereditato da Object.)

System_CAPS_pubmethodGetHashCode()

Funge da funzione hash predefinita.(Ereditato da Object.)

System_CAPS_pubmethodGetType()

Ottiene l'oggetto Type dell'istanza corrente.(Ereditato da Object.)

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.(Ereditato da Object.)

System_CAPS_pubmethodSetCanceled()

Esegue la transizione dell'oggetto Task<TResult> sottostante allo stato Canceled.

System_CAPS_pubmethodSetException(Exception)

Esegue la transizione dell'oggetto Task<TResult> sottostante allo stato Faulted e associa questo oggetto a un'eccezione specificata.

System_CAPS_pubmethodSetException(IEnumerable<Exception>)

Esegue la transizione dell'oggetto Task<TResult> sottostante allo stato TaskStatus.Faulted e associa all'oggetto una raccolta di eccezioni.

System_CAPS_pubmethodSetResult(TResult)

Esegue la transizione dell'oggetto Task<TResult> sottostante allo stato RanToCompletion.

System_CAPS_pubmethodToString()

Restituisce una stringa che rappresenta l'oggetto corrente.(Ereditato da Object.)

System_CAPS_pubmethodTrySetCanceled()

Tenta di eseguire la transizione dell'oggetto Task<TResult> sottostante allo stato Canceled.

System_CAPS_pubmethodTrySetCanceled(CancellationToken)

Tenta di eseguire la transizione dell'oggetto Task<TResult> sottostante allo stato TaskStatus.Canceled e abilita l'archiviazione di un token di annullamento nell'attività annullata.

System_CAPS_pubmethodTrySetException(Exception)

Tenta di eseguire la transizione dell'oggetto Task<TResult> sottostante allo stato Faulted e associa tale oggetto a un'eccezione specificata.

System_CAPS_pubmethodTrySetException(IEnumerable<Exception>)

Tenta di eseguire la transizione dell'oggetto Task<TResult> sottostante allo stato Faulted e associa a questo oggetto una raccolta di eccezioni.

System_CAPS_pubmethodTrySetResult(TResult)

Tenta di eseguire la transizione dell'oggetto Task<TResult> sottostante allo stato RanToCompletion.

In molti scenari, è utile abilitare un Task<TResult> per rappresentare un'operazione asincrona esterna. TaskCompletionSource<TResult> viene fornito a questo scopo. Consente la creazione di un'attività che può essere inviata agli utenti e gli utenti possono utilizzare i membri dell'attività come se fossero tutti gli altri. Tuttavia, a differenza della maggior parte delle attività, lo stato di un'attività creata da un oggetto TaskCompletionSource è controllato in modo esplicito dai metodi su TaskCompletionSource. In questo modo il completamento dell'operazione asincrona esterna saranno propagate all'attività sottostante. La separazione assicura anche che i consumer non sono in grado di eseguire la transizione dello stato senza l'accesso a TaskCompletionSource corrispondente. Per ulteriori informazioni, vedere la voce The Nature of TaskCompletionSource<TResult> in parallelo blog sulla programmazione con .NET.

Il Parallel Extensions samples contiene anche esempi su come usare TaskCompletionSource<TResult>.

Nell'esempio seguente viene illustrato come utilizzare un TaskCompletionSource<TResult>:

using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;

class TCSDemo
{
    // Demonstrated features:
    // 		TaskCompletionSource ctor()
    // 		TaskCompletionSource.SetResult()
    // 		TaskCompletionSource.SetException()
    //		Task.Result
    // Expected results:
    // 		The attempt to get t1.Result blocks for ~1000ms until tcs1 gets signaled. 15 is printed out.
    // 		The attempt to get t2.Result blocks for ~1000ms until tcs2 gets signaled. An exception is printed out.
    static void Main()
    {
        TaskCompletionSource<int> tcs1 = new TaskCompletionSource<int>();
        Task<int> t1 = tcs1.Task;

        // Start a background task that will complete tcs1.Task
        Task.Factory.StartNew(() =>
        {
            Thread.Sleep(1000);
            tcs1.SetResult(15);
        });

        // The attempt to get the result of t1 blocks the current thread until the completion source gets signaled.
        // It should be a wait of ~1000 ms.
        Stopwatch sw = Stopwatch.StartNew();
        int result = t1.Result;
        sw.Stop();

        Console.WriteLine("(ElapsedTime={0}): t1.Result={1} (expected 15) ", sw.ElapsedMilliseconds, result);

        // ------------------------------------------------------------------

        // Alternatively, an exception can be manually set on a TaskCompletionSource.Task
        TaskCompletionSource<int> tcs2 = new TaskCompletionSource<int>();
        Task<int> t2 = tcs2.Task;

        // Start a background Task that will complete tcs2.Task with an exception
        Task.Factory.StartNew(() =>
        {
            Thread.Sleep(1000);
            tcs2.SetException(new InvalidOperationException("SIMULATED EXCEPTION"));
        });

        // The attempt to get the result of t2 blocks the current thread until the completion source gets signaled with either a result or an exception.
        // In either case it should be a wait of ~1000 ms.
        sw = Stopwatch.StartNew();
        try
        {
            result = t2.Result;

            Console.WriteLine("t2.Result succeeded. THIS WAS NOT EXPECTED.");
        }
        catch (AggregateException e)
        {
            Console.Write("(ElapsedTime={0}): ", sw.ElapsedMilliseconds);
            Console.WriteLine("The following exceptions have been thrown by t2.Result: (THIS WAS EXPECTED)");
            for (int j = 0; j < e.InnerExceptions.Count; j++)
            {
                Console.WriteLine("\n-------------------------------------------------\n{0}", e.InnerExceptions[j].ToString());
            }
        }
    }

}

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 4.0
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 5.0
Windows Phone Silverlight
Disponibile da 8.0
Windows Phone
Disponibile da 8.1

Tutti i membri di TaskCompletionSource<TResult> sono thread-safe e possono essere utilizzati da più thread contemporaneamente.

Torna all'inizio
Mostra: