Интерфейс System.IAsyncResult

Метод Beginlnvoke() всегда возвращает объект, реализующий интерфейс IAsyncResult, а метод Endlnvoke() всегда принимает в единственном параметре только совместимое с IAsyncResult значение. Возвращаемый методом Beginlnvoke() совместимый с IAsyncResult объект, по сути, играет роль связующего механизма, который позволяет вызывающему потоку получать результат выполнения метода, вызываемого позже асинхронно через метод Endlnvoke(). Интерфейс IAsyncResult (из пространства имен System) определяется следующим образом:

public interface IAsyncResult

{

object AsyncState { get; }

WaitHandle AsyncWaitHandle { get; }

bool CompletedSynchronously { get; }

bool IsCompleted { get; }

}

В самом простом случае можно избегать необходимости вызывать эти члены напрямую. Все, что для этого требуется — поместить совместимый с IAsyncResult объект, который возвращает метод Beginlnvoke (), в кэш и затем передать его методу Endlnvoke() при готовности получить результат вызова метода. Как будет показано позже, вызывать

члены совместимого с IAsyncResult объекта можно, если планируется принимать

"более серьезное участие" в процессе извлечения возвращаемого методом значения.

В случае асинхронного вызова метода, который возвращает значение void, его можно

спокойно вызывать и забыть. В подобных ситуациях никогда не требуется ни помещать

совместимый с IAsyncResult объект в кэш, ни вызывать метод Endlnvoke() (из-за тсутствия

подлежащего извлечению возвращаемого значения).


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



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