Насколько я понимаю, я могу выполнить и обработать сервисный вызов тремя различными способами:
- Синхронный: просто позвоните в сервис. Метод, чтобы получить данные, которые вы хотите вернуть
- Асинхронный 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. Но ДЕЙСТВИТЕЛЬНО медленно. Вызов методов несколько раз действительно сильно забивает все.
Почему это? Что делает последний асинхронный подход таким медленным по сравнению с первым?