Вызов метода асинхронным образом

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: