Каковы плюсы и минусы использования веб-сервисов с 1. events / 2. IAsyncResult?

2

Я сделал пример WPF, который использует веб-сервис (www.webservicex.com/globalweather.asmx) двумя разными способами:

с событиями следующим образом:

public Window1()
{
    InitializeComponent();
    DataContext = this;

    Location = "loading...";
    Temperature = "loading...";
    RelativeHumidity = "loading...";

    client.GetWeatherCompleted += 
            new EventHandler<GetWeatherCompletedEventArgs>(client_GetWeatherCompleted);
    client.GetWeatherAsync("Berlin", "Germany");
}

void client_GetWeatherCompleted(object sender, GetWeatherCompletedEventArgs e)
{
    XDocument xdoc = XDocument.Parse(e.Result);

    Location = xdoc.Descendants("Location").Single().Value;
    Temperature = xdoc.Descendants("Temperature").Single().Value;
    RelativeHumidity = xdoc.Descendants("RelativeHumidity").Single().Value;
}

и с помощью методов Begin/End и IAsyncResult:

public Window1()
{
    InitializeComponent();
    DataContext = this;

    Location = "loading...";
    Temperature = "loading...";
    RelativeHumidity = "loading...";

    client.BeginGetWeather("Berlin", "Germany", new AsyncCallback(GotWeather), null);
}

void GotWeather(IAsyncResult result)
{
    string xml = client.EndGetWeather(result).ToString();
    XDocument xdoc = XDocument.Parse(xml);

    Location = xdoc.Descendants("Location").Single().Value;
    Temperature = xdoc.Descendants("Temperature").Single().Value;
    RelativeHumidity = xdoc.Descendants("RelativeHumidity").Single().Value;

}

Эти два подхода, похоже, выполняют ту же задачу.

Каковы их преимущества и недостатки? Когда вы будете использовать один, а не другой?

Теги:
web-services
events
iasyncresult

2 ответа

2
Лучший ответ

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

0

Это просто вопрос вкуса. Никакой разницы с техническими перспективами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню