在Windows Phone 8上调用异步方法时发生死锁

时间:2015-06-13 11:48:31

标签: c# windows-phone-8 asynchronous

我的问题如下:

在UI线程上,我有一个按钮事件,从中我称之为服务方法:

private async void RefreshObjectsButton_Click(object sender, EventArgs e)
{
    var objectService = new ObjectService();
    var objects = await objectService.GetObjects(UserInfo.Token);
}

服务方法是:

public class ObjectService : ServiceClientBase, IObjectService
{
    public async Task<ObservableCollection<ObjectViewModel>> GetObjects(string token)
    {
        var response = await GetAsync<ObservableCollection<HookViewModel>>("uri_address", token);
        return response;
    }
}

在ServiceClientBase中实现的GetAsync方法:

public async Task<T> GetAsync<T>(string uri, string token)
{
    using (var client = CreateClient())
    {
        try
        {
            HttpResponseMessage response = new HttpResponseMessage();
            response = await client.GetAsync(uri);
            T retVal = default(T);
            if (response.IsSuccessStatusCode)
            {
                retVal = await response.Content.ReadAsAsync<T>();
            }
            return retVal;
        }
        catch (Exception ex)
        {
            //TO DO log exception
            return default(T);
        }
    }
}

当执行达到 GetAsync<T>() 时,会发送请求,我会得到一个结果, retVal 包含一个值列表。但是,在 GetAsync<T>() 执行结束后, GetObjects() 将不再继续执行。我认为这是一个僵局,正如here所解释的那样。但是,使用上一个链接中的建议并没有解决我的问题。显然我在这里遗漏了一些东西。 有人可以解释为什么会出现这种僵局,并且可能会在解决这个问题时提供一些进一步的建议吗?

0 个答案:

没有答案