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

Interfaccia IAsyncResult

 

Rappresenta lo stato di un'operazione asincrona.

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

[ComVisibleAttribute(true)]
public interface IAsyncResult

NomeDescrizione
System_CAPS_pubpropertyAsyncState

Ottiene un oggetto definito dall'utente qualificato per un'operazione asincrona o contenente informazioni relative a un'operazione asincrona.

System_CAPS_pubpropertyAsyncWaitHandle

Ottiene un WaitHandle, utilizzato per attendere il completamento di un'operazione asincrona.

System_CAPS_pubpropertyCompletedSynchronously

Ottiene un valore che indica il completamento in modo sincrono di un'operazione asincrona.

System_CAPS_pubpropertyIsCompleted

Ottiene un valore che indica l'eventuale completamento dell'operazione asincrona.

L'interfaccia IAsyncResult viene implementata da classi contenenti metodi in grado di operare in modo asincrono.Un'operazione asincrona viene iniziata dal tipo restituito dei metodi, ad esempio FileStream.BeginRead, e viene passata ai metodi che includono un'operazione asincrona, ad esempio FileStream.EndRead.Gli oggetti IAsyncResult vengono inoltre passati ai metodi richiamati dai delegati AsyncCallback al completamento dell'operazione asincrona.

Un oggetto che supporta l'interfaccia IAsyncResult archivia le informazioni di stato per un'operazione asincrona e fornisce un oggetto di sincronizzazione per consentire la segnalazione ai thread al termine dell'operazione.

System_CAPS_noteNota

La classe AsyncResult è l'implementazione di IAsyncResult restituito dal metodo BeginInvoke quando si utilizza un delegato per chiamare un metodo in modo asincrono.

Per una descrizione dettagliata delle modalità di utilizzo dell'interfaccia IAsyncResult, vedere l'argomento Chiamata asincrona dei metodi sincroni.

Nell'esempio seguente viene illustrato come utilizzare la proprietà AsyncWaitHandle per ottenere WaitHandle e come rimanere in attesa di una chiamata asincrona su un delegato.L'oggetto WaitHandle viene segnalato al completamento della chiamata asincrona ed è possibile attenderlo chiamando il metodo WaitOne.

L'esempio è dato da due classi, la classe che contiene il metodo chiamato in modo asincrono e la classe che contiene il metodo Main che effettua la chiamata.

Per ulteriori informazioni e altri esempi di chiamate asincrone ai metodi tramite delegati, vedere Asynchronní volání synchronních metod.

using System;
using System.Threading; 

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
    public class AsyncDemo 
    {
        // The method to be executed asynchronously.
        public string TestMethod(int callDuration, out int threadId) 
        {
            Console.WriteLine("Test method begins.");
            Thread.Sleep(callDuration);
            threadId = Thread.CurrentThread.ManagedThreadId;
            return String.Format("My call time was {0}.", callDuration.ToString());
        }
    }
    // The delegate must have the same signature as the method
    // it will call asynchronously.
    public delegate string AsyncMethodCaller(int callDuration, out int threadId);
}
using System;
using System.Threading;

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
    public class AsyncMain 
    {
        static void Main() 
        {
            // The asynchronous method puts the thread id here.
            int threadId;

            // Create an instance of the test class.
            AsyncDemo ad = new AsyncDemo();

            // Create the delegate.
            AsyncMethodCaller caller = new AsyncMethodCaller(ad.TestMethod);

            // Initiate the asychronous call.
            IAsyncResult result = caller.BeginInvoke(3000, 
                out threadId, null, null);

            Thread.Sleep(0);
            Console.WriteLine("Main thread {0} does some work.",
                Thread.CurrentThread.ManagedThreadId);

            // Wait for the WaitHandle to become signaled.
            result.AsyncWaitHandle.WaitOne();

            // Perform additional processing here.
            // Call EndInvoke to retrieve the results.
            string returnValue = caller.EndInvoke(out threadId, result);

            // Close the wait handle.
            result.AsyncWaitHandle.Close();

            Console.WriteLine("The call executed on thread {0}, with return value \"{1}\".",
                threadId, returnValue);
        }
    }
}

/* This example produces output similar to the following:

Main thread 1 does some work.
Test method begins.
The call executed on thread 3, with return value "My call time was 3000.".
 */

Universal Windows Platform
Disponibile da 4.5
.NET Framework
Disponibile da 1.1
Portable Class Library
Supportato in: portable .NET platforms
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: