授权后,将加载联系人页面。该方法在视图模型页面中调用。
public partial class Contacts : ContentPage
{
ContactsPageViewModels vm;
public Contacts()
{
vm = new ContactsPageViewModels();
BindingContext = vm;
InitializeComponent();
}
}我试着只发了200ok。所有内容都会到达http分析器,但在应用程序本身,它会挂在第一行。
public async Task<ObservableCollection<UserModel>> GetContactsList()
{
//freezes in the first line
var response = await client.GetAsync("http://localhost:52059/api/Home/GetContacts/" + Convert.ToString(App.User.ID));
string responseBody = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<ObservableCollection<UserModel>>(responseBody);
}控制器
[HttpGet]
[Route("GetContacts/{id}")]
public ActionResult GetContacts(int id)
{
ObservableCollection<UserModel> users = new ObservableCollection<UserModel>();
foreach (UserModel user in db.UserModels)
users.Add(user);
users.Remove(db.UserModels.FirstOrDefault(u => u.ID == id));
Response.Headers.Add("Content-Type", "application/json");
//return Ok();
return new JsonResult(users);
}在邮递员中所有的工作
发布于 2020-05-06 01:29:03
这听起来像是同步上下文的问题,并且位于应用程序的主线程上。
尝试:
public async Task<ObservableCollection<UserModel>> GetContactsList()
{
var response = await client.GetAsync("http://localhost:52059/api/Home/GetContacts/" + Convert.ToString(App.User.ID)).ConfigureAwait(false);
string responseBody = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
return JsonConvert.DeserializeObject<ObservableCollection<UserModel>>(responseBody);
}发生的是死锁,因为主线程正在等待异步结束。而async想要返回到线程并结束async --但不能,因为主线程正在等待它。
.ConfigureAwait(false)
我会说(不是深入到状态机和异步/等待是如何工作的),它将在其他线程上结束,即调用(主/同步)线程。
https://stackoverflow.com/questions/61618481
复制相似问题