|
|
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);
}
}
|
|