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

We use cookies. Read the Privacy and Cookie Policy

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

Чтобы дать указание делегату 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() еще есть работа!" появляется практически немедленно.