Wat is asynccallback?

Wat is het gebruik van asynccallback en waarom zouden we het gebruiken?


Antwoord 1, Autoriteit 100%

Wanneer de asyncMethod de verwerking afmaken, wordt AsyncCallback-methode automatisch genoemd, waar postverwerkingsverklaringen kunnen worden uitgevoerd. Met deze techniek is het niet nodig om te peilen of te wachten op de asyncdraad om te voltooien.

Hier is wat meer uitleg over asynccallback gebruik:

Terugbellend model: Het callback-model vereist dat we een methode opleveren om te bellen en elke staat die we nodig hebben bij de terugballemethode om de oproep te voltooien. Het callback-model is te zien in het volgende voorbeeld:

static byte[] buffer = new byte[100];
static void TestCallbackAPM()
{
    string filename = System.IO.Path.Combine (System.Environment.CurrentDirectory, "mfc71.pdb");
    FileStream strm = new FileStream(filename,
        FileMode.Open, FileAccess.Read, FileShare.Read, 1024,
        FileOptions.Asynchronous);
    // Make the asynchronous call
    IAsyncResult result = strm.BeginRead(buffer, 0, buffer.Length,
        new AsyncCallback(CompleteRead), strm);
}

In dit model maken we een nieuwe AsyncCallbackDelegate, opgeven van een methode om te bellen (op een andere thread) wanneer de bewerking is voltooid. Daarnaast specificeren we een object dat we nodig hebben als de staat van de oproep. Voor dit voorbeeld sturen we het streamobject in omdat we moeten bellen met EndReaden sluit de stroom.

De methode die we maken om aan het einde van het gesprek te worden genoemd, zouden er zoiets uitzien:

static void CompleteRead(IAsyncResult result)
{
    Console.WriteLine("Read Completed");
    FileStream strm = (FileStream) result.AsyncState;
    // Finished, so we can call EndRead and it will return without blocking
    int numBytes = strm.EndRead(result);
    // Don't forget to close the stream
    strm.Close();
    Console.WriteLine("Read {0} Bytes", numBytes);
    Console.WriteLine(BitConverter.ToString(buffer));
}

Andere technieken zijn Wait-tot-Done en Polling .

Wait-tot-Gereed Model The Wait-Take-Done Model Hiermee kunt u de asynchrone oproep starten en andere werk uitvoeren. Zodra het andere werk is gedaan, kunt u proberen de oproep te beëindigen en het zal blokkeren totdat de asynchrone oproep is voltooid.

// Make the asynchronous call
strm.Read(buffer, 0, buffer.Length);
IAsyncResult result = strm.BeginRead(buffer, 0, buffer.Length, null, null);
// Do some work here while you wait
// Calling EndRead will block until the Async work is complete
int numBytes = strm.EndRead(result);

of u kunt wachthandels gebruiken.

result.AsyncWaitHandle.WaitOne();

Polling Model De polling-methode is vergelijkbaar, met uitzondering dat de code de IAsyncResultpeilt om te zien of deze is voltooid.

// Make the asynchronous call
IAsyncResult result = strm.BeginRead(buffer, 0, buffer.Length, null, null);
// Poll testing to see if complete
while (!result.IsCompleted)
{
    // Do more work here if the call isn't complete
    Thread.Sleep(100);
}

Antwoord 2, Autoriteit 22%

Denk er op deze manier aan. Je hebt enkele operaties die je parallel wilt uitvoeren. U zou dit in staat stellen door draden te gebruiken die asynchroon uitvoert. Dit is een vuur en vergeten mechanisme.

Maar sommige situaties bellen voor een mechanisme waar u kunt vuren en vergeten, maar een melding nodig hebt wanneer de operatie is voltooid. Hiervoor zou u een async callback gebruiken.

De bewerking is async, maar roept u terug wanneer de bewerking is voltooid. Het voordeel hiervan is dat u niet hoeft te wachten op de operatie totdat het is voltooid. U bent vrij om andere bewerkingen uit te voeren en daarom is uw draad niet geblokkeerd.

Een voorbeeld hiervan zou een achtergrondoverdracht van een groot bestand zijn. Terwijl de overdracht aan de gang is, wil je de gebruiker niet echt blokkeren om andere operaties te doen. Nadat de overdracht is voltooid, belt het proces u terug op een async-methode, waar u waarschijnlijk een berichtvenster kunt verschijnen, zegt ‘overdracht compleet’.


Antwoord 3, Autoriteit 3%

Asynccallbacks worden gebruikt om een ​​functie op te geven om te bellen wanneer een asynchrone werking is voltooid. Als u bijvoorbeeld een IO-operatie aan het doen was, noemt u BINNENLANDSE RECHTS op een stroom en passeert u een asynccallback-afgevaardigde. De functie zou worden gebeld wanneer de gelezende bediening is voltooid.

Zie voor meer informatie:

Other episodes