![](/img/trans.png)
[英]How return a value of type 'Func<TextWriter, Task>' in asp.net core 2.0
[英]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.