Sim*_*mon 2 c# asynchronous asp.net-core razor-pages
我正在调用一个包装EF核心的存储库,弄乱了contoso示例
public async void PopulateFacultySL( object selectedFaculty )
{
var data = await GetUnitOfWork().Faculties.GetAllAsync();
FacultySL = new SelectList( data, "Id", "Name", selectedFaculty );
}
Run Code Online (Sandbox Code Playgroud)
刷新页面时,有时会填充下拉列表,有时则不会.我迟到了技术(异步和等待)并试图学习,我知道它可能是某种愚蠢的东西,并希望有经验的人可以看到问题是什么.
protected DbSet<TEntity> TypedContext => Context.Set<TEntity>();
public virtual Task<List<TEntity>> GetAllAsync()
{
return ReturnAndFilterByInstitutionAsync( TypedContext.AsQueryable() );
}
public Task<List<TEntity>> ReturnAndFilterByInstitutionAsync( IQueryable<TEntity> query )
{
return query.Where( q => q.InstitutionId == InstitutionId ).ToListAsync();
}
Run Code Online (Sandbox Code Playgroud)
如果您需要查看任何其他课程信息,请告诉我
编辑:这是页面中的原始调用方法
public IActionResult OnGet()
{
PopulateFacultySL(null);
return Page();
}
Run Code Online (Sandbox Code Playgroud)
然后必须改为:
public async Task<IActionResult> OnGet()
{
FacultySL = await GetFacultySL( null );
return Page();
}
Run Code Online (Sandbox Code Playgroud)
使其接受来自以下建议await修订的关键字GetFacultySL
避免async void火灾和忘记方法.
有可能在PopulateFacultySL调用时,有时它没有及时完成,以便在将响应发送到客户端之前包含在响应中.这就是为什么有时会填充它,有时它不是在刷新页面时,因为它们是并行调用的.
你需要做的是重构方法,以便等待它.
public async Task PopulateFacultySL(object selectedFaculty = null) {
var data = await GetUnitOfWork().Faculties.GetAllAsync();
FacultySL = SelectList(data, "Id", "Name", selectedFaculty);
}
Run Code Online (Sandbox Code Playgroud)
并在页面加载时等待它
public async Task<IActionResult> OnGetAsync() {
await PopulateFacultySL();
return Page();
}
Run Code Online (Sandbox Code Playgroud)
现在,页面将在显示页面之前等待填充数据.
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |