我的问题如下:
在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所解释的那样。但是,使用上一个链接中的建议并没有解决我的问题。显然我在这里遗漏了一些东西。
有人可以解释为什么会出现这种僵局,并且可能会在解决这个问题时提供一些进一步的建议吗?