【发布时间】:2019-12-11 05:40:03
【问题描述】:
我有返回等待成员视图模型的服务方法。
public async Task<MemberVm> GetMember(Guid id)
{
Task<Member> output = Context.Members
.SingleOrDefaultAsync(e => e.Id == id);
return await output != null
? new MemberVm(output)
: null;
}
由于new MemberVm(output),这无法编译。相反,计算机要求我做new MemberVm(await output)。如果它是一个简单的 return 语句,我会理解它,但在这种情况下,它在评估条件表达式时已经被等待。对我来说,这似乎是伪代码。
if(await output != null)
return await-again-but-why new MemberVm(output)
else
return null;
是我做错了还是只是语言语法的意外和不幸后果?
【问题讨论】:
-
我很确定你早上问过同样的事情。答案还是一样 - 等待 task 得到结果。
output是一个任务,而不是操作的实际输出。使用Member output= await Context.Members.SingleOrDefaultAsync(e=>e.Id==id) -
另外,
output永远不会是null,因为 SingleOrDefaultAsync(或框架中的任何异步调用)永远不会返回空值。只有任务的结果才能产生null值。 -
default(MemberVm) 不为空?
-
即使在构造函数中等待调用,也不能等待 null。
-
@fildor 哦,好吧,是的,我知道,我想我只是对
output在这种情况下的含义感到困惑。
标签: c# asynchronous async-await asp.net-core-2.2 .net-core-2.2