为什么在等待呼叫后需要等待呼叫(.NET Core 2.2)

康拉德·维特尔斯滕

我有返回一个等待成员视图模型的服务方法。

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;

我做错了吗?或者仅仅是语言语法的意外和不幸的后果?

菲尔多

它不会编译,因为outputTask而不是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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在角度2中呼叫异步等待

来自分类Dev

.NET Core 2密码哈希

来自分类Dev

.NET Core 2的编码问题

来自分类Dev

.NET CORE 2 EF包含

来自分类Dev

.Net Core 2 FromSql 问题

来自分类Dev

Asp.net Core 2上AddFormatterMappings()的用途是什么

来自分类Dev

为什么 Enumerable.Zip() 的 2 参数重载在 .NET Core 中而不是在 .NET Standard 中?

来自分类Dev

ASP.NET Core 2:缺少ApplicationInsights

来自分类Dev

.NET Core 2中的ReadAsMultipartAsync等价

来自分类Dev

ASP.NET Core 2:UserManager与DbContext

来自分类Dev

.NET Core 2.x的UI

来自分类Dev

在 OSX 上使用 MySQL 的 .NET Core 2

来自分类Dev

Asp.net core 2前缀路由

来自分类Dev

.NET Core 2中缺少TaskCache类

来自分类Dev

.NET Core 2,DI,配置文件

来自分类Dev

C#ASP.NET Core 2 HashAlgorithm

来自分类Dev

.NET Core 2 API 属性路由配置

来自分类Dev

AutoMapper:以Net Core 2语法双向映射

来自分类Dev

AspNetCoreModuleV2问题.NET Core 3.0

来自分类Dev

将Asp.Net Core 1转换为Core 2后Jwt无法正常工作

来自分类Dev

从 .Net Core 2 升级到 .Net 6 后出现编译器错误

来自分类Dev

为什么我的ASP.NET Core 2方法不能返回TwiML?

来自分类Dev

为什么要在ASP.Net Core 2 MVC中登录以下更改密码

来自分类Dev

困惑:ASP.NET Core 2不是托管代码,但是ASP.Net Core Runtime是做什么用的?

来自分类Dev

无法添加项目 .net core 2 引用但可以添加 dll .net core 2 引用

来自分类Dev

如何刷新OAuth2令牌?我需要等待令牌到期吗?(Patreon API)

来自分类Dev

.NET Core 1.1.4 可以运行 .NET standard 2 吗?

来自分类Dev

.NET与.NET Core 2的不同P / Invoke入口点

来自分类Dev

为什么 ASP.NET Web API 2 和 ASP.NET Core 3.1 Web API 之间的行为不同?

Related 相关文章

热门标签

归档