Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

IAsyncResult interface

 

Date de publication : novembre 2016

Représente l'état d'une opération asynchrone.

Espace de noms:   System
Assembly:  mscorlib (dans mscorlib.dll)

[ComVisibleAttribute(true)]
public interface IAsyncResult

NomDescription
System_CAPS_pubpropertyAsyncState

Obtient un objet défini par l’utilisateur qui qualifie ou contient des informations sur une opération asynchrone.

System_CAPS_pubpropertyAsyncWaitHandle

Obtient un WaitHandle qui est utilisé pour attendre qu’une opération asynchrone se termine.

System_CAPS_pubpropertyCompletedSynchronously

Obtient une valeur qui indique si l’opération asynchrone s’est terminée de manière synchrone.

System_CAPS_pubpropertyIsCompleted

Obtient une valeur qui indique si l’opération asynchrone est terminée.

Le IAsyncResult interface est implémentée par des classes contenant des méthodes qui peuvent opérer de manière asynchrone. Il est le type de retour des méthodes qui initie une opération asynchrone, tel que FileStream.BeginRead, et il est transmis aux méthodes qui conclut une opération asynchrone, tel que FileStream.EndRead. IAsyncResult les objets sont également passés aux méthodes appelées par AsyncCallback délègue lorsqu’une opération asynchrone se termine.

Un objet qui prend en charge la IAsyncResult interface stocke les informations d’état pour une opération asynchrone et fournit un objet de synchronisation permettant aux threads d’être signalé lorsque l’opération se termine.

System_CAPS_noteRemarque

La AsyncResult classe est l’implémentation de IAsyncResult qui est retourné par la BeginInvoke méthode lorsque vous utilisez un délégué pour appeler une méthode de façon asynchrone.

Pour obtenir une description détaillée de la façon dont IAsyncResult interface est utilisée, consultez la Calling Synchronous Methods Asynchronously rubrique.

L’exemple suivant montre comment utiliser le AsyncWaitHandle propriété à obtenir un WaitHandle, et l’attente d’un appel asynchrone sur un délégué. Le WaitHandle est signalé quand l’appel asynchrone se termine et vous pouvez l’attendre en appelant la méthode WaitOne.

L’exemple se compose de deux classes : la classe contenant la méthode qui est appelée de façon asynchrone et la classe qui contient la Main méthode qui effectue l’appel.

Pour plus d’informations et obtenir d’autres exemples d’appel de méthodes asynchrone à l’aide de délégués, consultez Calling Synchronous Methods Asynchronously.

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.".
 */

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 1.1
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: