Почему использование обратного вызова вызывает столько накладных расходов по сравнению с - PullRequest
0 голосов
/ 21 марта 2012

Насколько я понимаю, я могу выполнить и обработать сервисный вызов тремя различными способами:

  • Синхронный: просто позвоните в сервис. Метод, чтобы получить данные, которые вы хотите вернуть
  • Асинхронный 1, обратного вызова нет:
public void ServiceCallNoCallback()
{           
    var result = service.BeginCall(**);
    result.AsyncWaitHandle.WaitOne();
    var devicePageDto = service.EndCall(result);
}
  • Асинхронный 2, с обратным вызовом (псевдо):
    public void ServiceCallWithCallback()
    {             
        deviceService.BeginGetDevicePage(Callback);
    }

    public void Callback(IAsyncResult result)
    {
        try
        {
            var callResult = service.EndCall(result);

        }
        catch(Exception ex)
        {
            Console.WriteLine("ex: " + ex.Message);                
        }            
    }

Последний метод используется в контексте приложения Silverlight. Но ДЕЙСТВИТЕЛЬНО медленно. Вызов методов несколько раз действительно сильно забивает все. Почему это? Что делает последний асинхронный подход таким медленным по сравнению с первым?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...