Await 表达式作为 C# 中的方法参数

问题描述 投票:0回答:1

Microsoft 文档教程向我介绍了这段代码:

var repositories = await JsonSerializer.DeserializeAsync<List<Repository>>(await streamTask);

我熟悉

async
await
以及如何使用它们,至少我是这么认为的。本教程提到这是一个使用“await 表达式”的示例 - 这很好,毕竟该表达式本身看起来并不那么奇怪,但我还没有找到任何 C# 代码的另一个单一示例,例如this - 等待表达式被传递到方法的地方 - 任何地方。这里的await关键字几乎看起来像是一个参数修饰符,例如参考、输出、输入。

所以我的问题是,这是一个新功能,只是很少使用,还是对我来说只是新功能?它的功能似乎显而易见、直观且有用,但正如我提到的,我还没有在任何地方找到类似代码的另一个示例。

我正在浏览的教程:

https://learn.microsoft.com/en-us/dotnet/csharp/tutorials/console-webapiclient

c# asynchronous async-await task parameter-passing
1个回答
4
投票

我还没有找到任何像这样的 C# 代码的另一个单一示例 - 其中等待表达式被传递到方法 - 任何地方。

这并不罕见。正如另一位评论者指出的那样,出于可调试性或可读性的原因,

await
关键字通常被分成单独的行。但这种用法我见过很多次了。

await
表达式的另一个常见模式是使用括号来提取结果的一部分:

var x = (await SomethingAsync()).Property;

这里的await关键字几乎看起来就像是一个参数修饰符,例如参考、输出、输入。

我认为它只是看起来那样,因为它不熟悉并且颜色像编辑器中的关键字一样。

await
- 就像
new
- 是存在于表达式中的关键字。

所以我的问题是,这是一个新功能,只是很少使用,还是对我来说只是新功能?

对你来说是新的。

在原始

async
CTP 中,
await
表达式无法正常工作,并且 had 需要拆分为单独的语句。但在官方
async
支持发布之前,该限制已被删除,因此
await
表达式从第一天起就受到支持(忽略预发布)。

© www.soinside.com 2019 - 2024. All rights reserved.