Синхронные и асинхронные обратные вызовы

Действовать на флажок, проверяемый или непроверенный по щелчку.

<input type="checkbox" id="customCheck1">

 $('#customCheck1').click(function () {
        if (this.checked == true) {
            console.log('checked');
        }
        else {
            console.log('un-checked');
        }
    });
6
задан Mr. Pei 16 May 2016 в 20:40
поделиться

3 ответа

Интерфейс IAsyncCallback не существует, поэтому вы не можете его реализовать.

Я подозреваю, что вы действительно хотите узнать об интерфейсе IAsyncResult .

Я рекомендую вам прочитать эту страницу в MSDN.


Интерфейс IAsyncResult представляет собой операцию (например, веб-запрос или базу данных call), который выполняется в фоновом режиме, в то время как ваш код продолжает выполняться. Он может сказать вам, завершилась ли операция (свойство 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 Независимо от метода, который вы вызвали в первую очередь. Вы должны передать ему IAsyncResult из Begin Anything или из AsyncCallback. Когда вы его вызываете, он будет ждать завершения операции (если она еще не завершена), а затем вернет вам результат операции. (Предположим, что операция что-то возвращает; например, WebRequest.EndGetResponse вернет WebResponse ). Если во время операции возникнет какая-либо ошибка, End Whatever вызовет исключение.


Вы должны реализовать IAsyncResult, если хотите создать свою собственную операцию, которая может выполняться в фоновом режиме. Вы также должны создать методы Begin Whatever и End Whatever , которые возвращают и принимают его, соответственно. Для получения дополнительной информации о реализации IAsyncResult см. здесь .

14
ответ дан 8 December 2019 в 05:56
поделиться

С синхронный обратный вызов вызывающий метод (или поток) должен дождаться завершения вызываемого метода, прежде чем он сможет продолжить обработку - во многом аналогично вызову «обычного» метода.

С помощью асинхронного обратного вызова вызывающий метод (или поток) может продолжить обработку других входных данных, событий или чего-либо еще, не дожидаясь завершения вызываемого метода.

Для потока пользовательского интерфейса приложения, если вы не хотите, чтобы он «зависал», пока приложение выполняет какой-то длительный процесс, вам необходимо использовать асинхронные обратные вызовы.

5
ответ дан 8 December 2019 в 05:56
поделиться

Обратный вызов - это не что иное, как делегат. Термин обратный вызов используется потому, что вы обычно передаете его (делегата) в метод (в качестве аргумента), а затем вызываете его в этом методе, чтобы что-то сигнализировать.

Таковы обратные вызовы Sync и Async. Синхронно, выполняется в том же потоке, который вызвал метод (запустил действие). Асинхронные процессы обычно выполняются в другом потоке (но не всегда)

. Интерфейс IAsyncCallback - это шаблон для запуска асинхронной задачи. Вы передаете обратный вызов (делегат), который вызывается после завершения работы. Существует свойство, позволяющее определить, выполняется ли метод синхронно.

3
ответ дан 8 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: