繁体   English   中英

任务的返回类型<type>在 ASP.NET 核心控制器中</type>

[英]Return Type from Task<Type> in ASP.NET CORE Controllers

我有一个方法

基本控制器

public async Task<BaseModel> PopulateBaseModelAsync(BaseModel m)
{
    m.CreatedDate = DateTime.Now;
    m.CreatedById = await _userManager.GetUserAsync(User);
    m.CreatedByUsername = User.Identity.Name;
    return m;
}

由于_userManager.GetUserAsync方法,它被迫成为async Task

在派生的 controller 中,我想传入一个BaseModel并填充这三个属性,例如

派生控制器

public async Task<IActionResult> CategoriesCreateAsync(BookingCategory bc)
{
    if(bc != null)
    {
        bc = (BookingCategory)PopulateBaseModelAsync(bc);
        _context.BookingCategories.Add(bc);
        _context.SaveChanges();
    }
    return RedirectToAction(nameof(CategoriesIndex));
}

我最初希望PopulateBaseModel(BaseModel)只返回一个新的 BaseModel 例如下面,但由于强制async方法,我不知道如何实现这一点。

最初的目标

基本控制器

    public BaseModel PopulateBaseModel(BaseModel m)
    {
        m.CreatedDate = DateTime.Now;
        m.CreatedById = _userManager.GetUser(User); // Must use async :(
        m.CreatedByUsername = User.Identity.Name;
        return m;
    }

派生控制器

    public IActionResult CategoriesCreate(BookingCategory bc)
    {
        if(bc != null)
        {
            bc = (BookingCategory)PopulateBaseModel(bc);
            _context.BookingCategories.Add(bc);
            _context.SaveChanges();
        }
        return RedirectToAction(nameof(CategoriesIndex));
    }

我的主要问题是我不太了解Task的工作原理 - 方法

public async Task<BaseModel> PopulateBaseModelAsync(BaseModel m)

允许我返回BaseModel但它不会编译,因为它无法convert Task<BaseModel> to BookingCategory

您只是缺少一个await

public async Task<IActionResult> CategoriesCreateAsync(BookingCategory bc)
{
    if(bc != null)
    {
        await PopulateBaseModelAsync(bc);
        _context.BookingCategories.Add(bc);
        _context.SaveChanges();
    }
    return RedirectToAction(nameof(CategoriesIndex));
}

因为PopulateBaseModelAsync返回一个Task<IBaseModel>你需要等待它的完成。

这里的Task代表一个 I/O 操作,其结果不是立即可用的。

无需等待Task ,您的方法将在获得结果之前继续。

也不需要重新分配给bc ,因为PopulateBaseModelAsync正在修改它引用的实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM