C# 异步定时问题
我正在打电话给一个封装EF core的存储库,正在处理contoso示例C# 异步定时问题,c#,asynchronous,asp.net-core,razor-pages,C#,Asynchronous,Asp.net Core,Razor Pages,我正在打电话给一个封装EF core的存储库,正在处理contoso示例 public async void PopulateFacultySL( object selectedFaculty ) { var data = await GetUnitOfWork().Faculties.GetAllAsync(); FacultySL = new SelectList( data, "Id", "Name", selectedFaculty ); } 刷新页面时,有时填充下拉列
public async void PopulateFacultySL( object selectedFaculty )
{
var data = await GetUnitOfWork().Faculties.GetAllAsync();
FacultySL = new SelectList( data, "Id", "Name", selectedFaculty );
}
刷新页面时,有时填充下拉列表,有时不填充。我在技术(异步和等待)上迟到了,正在努力学习,我知道这可能是某个地方的愚蠢行为,希望有经验的人能看到问题所在
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();
}
然后必须将其改为:
public async Task<IActionResult> OnGet()
{
FacultySL = await GetFacultySL( null );
return Page();
}
公共异步任务OnGet()
{
FacultySL=等待获取FacultySL(null);
返回页();
}
要使其接受
wait
关键字以及下面建议中修订的GetFacultySL
,请避免async void
fire and forget方法
参考文献
调用PopulateFacultySL
时,有时在发送到客户机之前,无法及时完成响应。这就是为什么在刷新页面时有时会填充,有时不会,因为它们是并行调用的
您需要做的是重构方法,以便等待它
public async Task PopulateFacultySL(object selectedFaculty = null) {
var data = await GetUnitOfWork().Faculties.GetAllAsync();
FacultySL = SelectList(data, "Id", "Name", selectedFaculty);
}
并在页面加载时等待它
public async Task<IActionResult> OnGetAsync() {
await PopulateFacultySL();
return Page();
}
公共异步任务OnGetAsync(){
等待大众的到来;
返回页();
}
现在,页面将在显示页面之前等待填充数据
参考文献
public async Task<IActionResult> OnGetAsync() {
await PopulateFacultySL();
return Page();
}