Асинхронный вызов методов

Асинхронный вызов методов

Чтобы дать указание делегату BinaryOp вызвать метод Add() асинхронно, измените предыдущий метод Main() так, как показано ниже.

static void Main(string[] args) {

 Console.WriteLine("***** асинхронный вызов делегата *****");

 // Вывод ID выполняемого потока.

 Console.WriteLine("Вызван Main() в потоке {0}.", Thread.CurrentThread.GetHashCode());

 // Вызов Add() во вторичном потоке.

 BinaryOp b = new BinaryOp(Add);

 IAsyncResult iftAR = b.BeginInvoke(10, 10, null, null);

 // Выполнение другой работы в первичном потоке.…

 Console.WriteLine("В Main() еще есть работа!");

 // Получение результата метода Add(),

 // когда это требуется.

 int answer = b.EndInvoke(iftAR);

 Console.WriteLine ("10 + 10 равно {0}.", answer);

 Console.ReadLine();

}

Выполнив это приложение, вы увидите, что теперь выводятся два разных хешированных значения, поскольку в границах текущего домена приложения выполняются два потока (см. рис. 14.2).

Рис. 14.2. Методы, вызываемые асинхронно, выполняют свою работу в отдельном потоке

Вдобавок к уникальным хешированным значениям, вы также обнаружите, что при запуске приложения сообщение "В Main() еще есть работа!" появляется практически немедленно.