我有以下方法:
private async Task<Request> UpdateRequest(string id, RequestOutcome outcome)
{
var request = Db.Request.Where(r => r.Id.ToString().Equals(id)).First();
request.DateLastRead = DateTime.Now;
request.DateConcluded = request.DateLastRead;
request.Outcome = (int) outcome;
Db.Entry(request).State = EntityState.Modified;
if (await Db.SaveChangesAsync() <= 0) return null;
return outcome == RequestOutcome.Accept ? request : null;
}
这由以下调用:
public ActionResult Accept(string id)
{
var request = UpdateRequest(id, RequestOutcome.Accept);
if (request.Result != null)
{
var c = request.DateConcluded;
}
}
如何在方法之外检查更新是否成功?我应该说
request != null
吗?当我这样做时,我不断收到一条警告,指出表达式始终为真。我如何访问 request.DateConcluded 属性,因为它已成为一项任务。
最佳答案
您正在同步运行异步代码。
您必须在您的方法之前使用 await
来异步运行您的方法 - 这将为您处理获取任务的结果。
如果您同步运行代码,则必须获得任务的结果。
对于异步:
public async Task<ActionResult> Accept(string id)
{
var request = await UpdateRequest(id, RequestOutcome.Accept);
if (request!= null)
{
var c = request.DateConcluded;
}
}
同步
public ActionResult Accept(string id)
{
var request = UpdateRequest(id, RequestOutcome.Accept).Result;
if (request != null)
{
var c = request.DateConcluded;
}
}
关于c# - 从 Task<> 获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34386478/