2 Stimmen

Warum WaitOne aufrufen, wenn Sie direkt danach End aufrufen? Blockiert End nicht?

Versuchen zu verstehen dieses MSDN-Beispiel aber ich bin verwirrt über diese Zeilen:

IAsyncResult result = Dns.BeginGetHostEntry(args[0], null, null);
Console.WriteLine("Processing request for information...");
// Wait until the operation completes.
result.AsyncWaitHandle.WaitOne();
// The operation completed. Process the results.
try 
{
    // Get the results.
    IPHostEntry host = Dns.EndGetHostEntry(result);

Warum sollte man zum Beispiel asynchrone Programmierung verwenden, wenn man den Thread einfach blockiert, bis die Aufgabe sowieso abgeschlossen ist? Außerdem, was nützt der Aufruf von WaitOne tun? Blockiert die Funktion Ende nicht automatisch, bis der Vorgang abgeschlossen ist?

Ziemlich verwirrt hier drüben

2voto

Jon Skeet Punkte 1325502

Ja, EndGetHostEntry blockiert, bis der Vorgang abgeschlossen ist. Ich vermute, es ist nur ein schlechtes Beispiel, um ehrlich zu sein - möglicherweise ist es Versuch um Ihnen zwei verschiedene Möglichkeiten zu zeigen, wie Sie warten können, bis der Vorgang abgeschlossen ist, aber indem Sie sie in dasselbe Beispiel einfügen, wird die Verwirrung nur noch größer.

Ebenso wäre es sicherlich nützlicher gewesen, wenn es einen Kommentar wie "// do more work here" oder etwas Ähnliches enthalten hätte.

Es klingt so, als ob Sie die API gut verstehen und das Beispiel einfach ignorieren sollten - oder Sie fügen am Ende des Abschnitts "Benutzerinhalte" einen Hinweis auf all dies hinzu.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X