我有返回一个等待成员视图模型的服务方法。
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;
我做错了吗?或者仅仅是语言语法的意外和不幸的后果?
它不会编译,因为output
是Task
而不是Member
。
这将工作:
public async Task<MemberVm> GetMember(Guid id)
{
Member member = await Context.Members
.SingleOrDefaultAsync(e => e.Id == id);
return member != null
? new MemberVm(member)
: null;
}
这不是:
Task<Member> output = Context.Members
.SingleOrDefaultAsync(e => e.Id == id);
return await output != null // <= "await output" is null or a Member instance
? new MemberVm(output) // "output" is always a Task<Member>
: null;
通过写await output
“输出”本身不会被等待的结果代替。它仍然与您在上面创建的任务相同。
无关:我不建议返回null
。我想如果这有力地表明应用程序代码或数据库一致性出问题了,我将要MemberVM
进行设置null
或抛出异常。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句