检查完成异步并等待

时间:2018-01-25 05:10:32

标签: c# wpf async-await

我想了解asyncawait。现在我想在我当前的项目中应用asyncawait关键字。我的流程结构是:

//DataAccess 
Private List<Users> GetAllUsers()
{
   .... ;
   return List<Users>
}

//UI
List<Users> UserList=new List<Users>();
private async void Ok_ClickAsync(object sender, RoutedEventArgs e)
{
    //I want to select all user ant assign to UserList but currently it not use.
    UserList=await BindUser();    
}

private async Task<List<Users>> BindUser()
{
  List<Users> model=await Task.Run(()=>GetAllUsers());
  return model;
}
private void btnSave_Click(object sender, RoutedEventArgs e)
{
   //I want to use UserList here and want to validate process   
}

问题是如果我快速点击保存点击按钮,UserList计数为0(实际UserList记录超过100,000)。所以我想检查BindUser()进程是在Save_Click()中执行验证过程之前是否完成。请告诉我最佳解决方案,并帮助我理解asyncawait关键字。感谢。

1 个答案:

答案 0 :(得分:3)

问题不是很明确,但如果我理解正确,那么:

而不是

//UI
List<Users> UserList=new List<Users>();

您可以保留对可以获取用户列表的任务的引用:

//UI
Task<List<Users>> users;

然后:

private async Task btnSave_Click(object sender, RoutedEventArgs e)
{
     if (users != null)
     {
          List<Users> userList  = await users;
          // Your validations etc.
     }
}

显然,这不会处理错误情况,但会允许您使用async / await检索用户列表。