【发布时间】:2016-04-13 12:22:56
【问题描述】:
调用我在不同项目中运行的 api 应用程序时遇到问题。当我调试时,我可以看到调用在 api 中命中了正确的控制器。单击继续后,它只是挂起,没有任何反应。
我调用 Api 的方法
public async Task<ObservableCollection<Room>> SearchForAvailableRooms(DateTime from, DateTime to, bool smoke, bool minibar, int rooms, int customers)
{
ObservableCollection<Room> data = new ObservableCollection<Room>();
// Call api to get rooms
var client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:15998/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// New code:
HttpResponseMessage response = await client.GetAsync("api/room");
if (response.IsSuccessStatusCode)
{
var jsonAsString = await response.Content.ReadAsStringAsync();
}
else
{
throw new ApplicationException(string.Format("Response message is not OK. Issues in action: {0}", "api/room"));
}
return null;
}
client.GetAsync("api/room") 对 api 进行调用,但在它没有得到任何进一步.. if 或 else 没有被命中。
已阅读该方法调用将导致此堆栈出现死锁(挂起)帖子:Link to the post
他解释说它与我调用该方法的地方有关。 现在我正在使用这些行来调用该方法:
var task = _getRoomsService.SearchForAvailableRooms(searchModel.From, searchModel.To, searchModel.Smoke, searchModel.Minibar, searchModel.RoomValue, searchModel.CustomerValue);
var result = task.GetAwaiter().GetResult();
RoomsList = result;
有人能看出这里有什么问题吗?
更新:
我也尝试过:
RoomsList = await _getRoomsService.SearchForAvailableRooms(searchModel.From, searchModel.To, searchModel.Smoke, searchModel.Minibar, searchModel.RoomValue, searchModel.CustomerValue);
这给了我一个错误 --> 等待操作符只能在异步方法中使用。
【问题讨论】: