Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异步定时问题_C#_Asynchronous_Asp.net Core_Razor Pages - Fatal编程技术网

C# 异步定时问题

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 ); } 刷新页面时,有时填充下拉列

我正在打电话给一个封装EF core的存储库,正在处理contoso示例

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();
}