c# - 异步计时问题

标签 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 );
}

刷新页面时,有时会填充下拉列表,有时不会。我在技术(Async 和 await)方面迟到了,正在尝试学习,我知道这可能在某个地方很愚蠢,希望有经验的人能看出问题所在。

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

如果您需要查看任何其他类(class)信息,请告诉我

编辑: 这是页面的原始调用方法

public IActionResult OnGet()
{
    PopulateFacultySL(null);
    return Page();
}

然后必须更改为:

public async Task<IActionResult> OnGet()
{
    FacultySL = await GetFacultySL( null );
    return Page();
}

使其接受await 关键字,并根据以下建议修改GetFacultySL

最佳答案

避免async void触发后遗忘方法。

引用 Async/Await - Best Practices in Asynchronous Programming

很有可能当 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();
}

现在页面将在显示页面之前等待数据被填充。

引用 Introduction to Razor Pages in ASP.NET Core

关于c# - 异步计时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51072229/

相关文章:

c# - 结构体 sizeof/Marshal.SizeOf 变化

c# - SQL:如何在添加额外条目的同时将列移动到另一个表中?

java - Java 中的异步事件调度

asynchronous - 不再使用时是否应该关闭 clojure core.async channel ?

visual-studio - 如何使用 .PublishSettings 文件仅将 dist 文件夹部署到 azure 网站

c# - 寻找一个更好的过程来删除远程计算机上的文件夹

javascript - 我有一个关于 js Async Await 行为结构的问题

c# - OpenIdConnectAuthenticationHandler : message. 状态为 null 或为空。连接到 Azure Active Directory 时

asp.net-core - ASP.NET Core 5 应用程序找不到 View 错误

c# - AnyCPU C# DLL in 64bit process is unable to refer 64 bit C++ DLL(Giving error : Could not load file or assembly)