如何通过异步获取字符串和返回字符串?

时间:2014-03-17 03:26:05

标签: c# windows-phone-8

我的代码如下:

    public void getCity()
    {
        ReverseGeocodeQuery reverseGeocode = new ReverseGeocodeQuery();
        reverseGeocode.GeoCoordinate = new GeoCoordinate(10.79845, 106.65063);
        reverseGeocode.QueryCompleted += reverseGeocode_QueryCompleted;
        reverseGeocode.QueryAsync();
    }

    private void reverseGeocode_QueryCompleted(object sender, QueryCompletedEventArgs<IList<MapLocation>> e)
    {
        MapAddress geoAddress = e.Result[0].Information.Address;
    }

我需要在Address方法获取字符串getCity

但我不想在查询完成时处理以获取地址。我想在Address方法获取字符串getCity并返回地址。我认为使用异步但我不知道如何使用。

请帮帮我。感谢。

1 个答案:

答案 0 :(得分:2)

由于您正在获取数据异步,因此您需要使您的方法也异步。只需返回Task<MapAddress>并创建一个使用TaskCompletionSource<MapAddress>的任务。

您的下载方式如下:

public Task<MapAddress> GetCity()
{
    TaskCompletionSource<MapAddress> tcs = new TaskCompletionSource<MapAddress>();

    ReverseGeocodeQuery reverseGeocode = new ReverseGeocodeQuery();
    reverseGeocode.GeoCoordinate = new GeoCoordinate(10.79845, 106.65063);
    reverseGeocode.QueryCompleted += (sender, e)=> tcs.SetResult(e.Result[0].Information.Address);
    reverseGeocode.QueryAsync();

    return tcs.Task;
}

你可能需要一个异步方法来调用它。

private async void Something()
{
    MapAddress address = await GetCity();
}