Интерфейс IAsyncCallback
не существует, поэтому вы не можете его реализовать.
Я подозреваю, что вы действительно хотите знать об интерфейсе IAsyncResult
.
Я рекомендую вам прочитать эту страницу в MSDN.
Интерфейс IAsyncResult
представляет операцию (такую как веб-запрос или вызов базы данных), которая выполняется в фоновом режиме, пока ваш код продолжает выполняться. Он может сообщить вам, завершена ли операция (свойство IsCompleted
). Он также дает вам WaitHandle
объект (свойство AsyncWaitHandle
), который можно использовать для ожидания завершения операции. (По телефону result.AsyncWaitHandle.WaitOne()
)
Вы получаете IAsyncResult
, вызывая метод Begin
Whatever
. (BeginExecuteReader
, BeginGetResponse
и многие другие). Метод Begin
Whatever
принимает любые параметры, необходимые для операции (например, BeginExecuteReader
может принимать параметр CommandBehavior
), и может принимать делегат AsyncCallback (не интерфейс) и параметр состояния. In возвращает IAsyncResult
объект.
Делегат AsyncCallback - это предоставленный вами метод, который будет вызываться после завершения операции. Обычно он вызывается в другом потоке, поэтому будьте осторожны с ним. Ваш метод AsyncCallback получит тот же IAsyncResult, что метод Begin
Whatever
дал вам ранее. Параметр состояния помещается в IAsyncResult и игнорируется системой; Вы можете использовать его в своем методе AsyncCallback, чтобы отслеживать, для чего предназначалась операция. (Состояние может быть любым, каким вы хотите, включая null
)
Внутри вашего AsyncCallback (или где-либо еще) вы можете вызвать метод End
Whatever
, который соответствует методу Begin
Whatever
, который вы вызвали в первое место. Вы должны дать ему IAsyncResult от Begin
Whatever
или от AsyncCallback. Когда вы вызываете его, он будет ждать завершения операции (если она еще не завершена), а затем вернет вам результат операции. (Предполагая, что операция что-то возвращает; например, WebRequest.EndGetResponse
вернет WebResponse
). Если во время операции произошла ошибка, End
Whatever
сгенерирует исключение.
Вы бы реализовали IAsyncResult, если хотите создать собственную операцию, которая может выполняться в фоновом режиме. Вы также должны создать Begin
Whatever
и End
Whatever
методы, которые возвращают и принимают его соответственно. Для получения дополнительной информации о реализации IAsyncResult см. здесь .