Home   Cover Cover Cover Cover
 

Common Type System (CTS)

Beispiel "Sync/Async-Delegate-Aufruf"

Das Beispiel zeigt die synchrone und die asynchrone Verwendung von Delegates.
Wir definieren ein Delegate zur Addition zweier Integer-Werte und weisen diesem die statische Methode Add zu.
Anschließend rufen wir die Delegate-Methode zuerst synchron mit den Werten 3 und 5 auf, wobei direkt auf das Resultat der Berechnung gewartet wird.
Dann starten wir den asynchronen Aufruf. Während die Berechnung läuft, erledigen wir in der Main-Methode andere Dinge. Zu einem späteren Zeitpunkt testen wir, ob die Berechnung schon abgeschlossen ist und greifen auf das Ergebnis zu.

SyncAsyncDelegate.cs
using System;
using System.Threading;

delegate int Adder (int a, int b);

public class SyncAsyncDelegateDemo {

  static int Add(int a, int b) { return a + b; }

  static void Main() {
    Adder a = new Adder(Add);

    // synchroner Aufruf der Delegate-Methode
    Console.WriteLine("Synchroner Aufruf:");
    
    int result = a(3,5);
    
    Console.WriteLine("3 + 5 = " + result);

    Console.WriteLine();
    
    // asynchroner Aufruf der Delegate-Methode
    Console.WriteLine("Asynchroner Aufruf:");
    
    IAsyncResult asyncCall = a.BeginInvoke(5, 8, null, null);

      // hier kann man andere Dinge tun, z.B.
      Console.Write("Calculating ");
      for (int i = 0; i < 3; i++) {
        Thread.Sleep(250);
        Console.Write(".");
        Thread.Sleep(250);
      }
      Console.WriteLine();

    while (! asyncCall.IsCompleted)    // warte bis Berechnung fertig ist
      Thread.Sleep(0);
    result = a.EndInvoke(asyncCall);
    
    Console.WriteLine("5 + 8 = " + result);
  }
}