使用1. events / 2. IAsyncResult消费Web服务的利弊是什么?

时间:2009-11-04 09:55:57

标签: c# web-services events iasyncresult

我制作了一个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;
}

并使用开始/结束方法和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;

}

这两种方法似乎执行完全相同的任务。

它们的优点和缺点是什么?你什么时候使用一个而不是另一个?

2 个答案:

答案 0 :(得分:2)

对于远程服务的情况,我通常更喜欢使用回调而不是事件处理程序,因为它会导致更易读/可维护的代码(通过查看服务调用调用代码,我知道在调用完成时将执行哪些代码)。此外,在使用事件处理程序时,您需要注意不要多次声明它们。

答案 1 :(得分:0)

这只是品味问题。与技术前景没有区别。