Чтобы указать делегату BinaryOp на необходимость вызова метода Add() асинхронным образом, изменим предыдущий метод Main () следующим образом:
static void Main(string[] args)
{
Console.WriteLine("***** Async Delegate Invocation *****");
// Отображение идентификатора выполняющегося потока.
Console.WriteLine("Main () invoked on thread {0}.",
Thread.CurrentThread.ManagedThreadId);
// Вызов метода Add() во вторичном потоке.
BinaryOp b = new BinaryOp(Add);
IAsyncResult iftAR = b.BeginInvoke(10, 10, null, null);
// Выполнение другой работы в главном потоке...
Console.WriteLine("Doing more work in Main()!");
// Получение результата метода Add() при готовности.
int answer = b.EndInvoke(iftAR);
Console.WriteLine("10 + 10 is {0}.", answer);
Console.ReadLine();
}
Запустив это приложение, мы увидим, как отображаются два отдельных уникальных
идентификатора потока, поскольку на самом деле в текущем домене приложения
работает несколько потоков (рис. 1).
Рис. 1 Методы, вызываемые асинхронным образом, выполняют свою работу в отдельном потоке
Помимо отдельных идентификаторов, мы еще увидим, что во время выполнения приложения сообщение Doing more work in Main()! появится сразу, пока вторичный поток будет занят решением своей задачи.