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

DP3*_*3PO 1 c# asynchronous task parameter-passing async-await

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

\n
var repositories = await JsonSerializer.DeserializeAsync<List<Repository>>(await streamTask);\n
Run Code Online (Sandbox Code Playgroud)\n

我熟悉它们asyncawait了解如何使用它们,至少我是这么认为的。教程提到这是使用 \xe2\x80\x9cawait 表达式 \xe2\x80\x9d 的示例 - 那 \xe2\x80\x99s 很好,毕竟,表达式 \xe2\x80\x99t 看起来并不那么奇怪在它自己的\xe2\x80\x99s 上,但我还没有找到任何像这样的 C# 代码的另一个单一示例 - 其中等待表达式被传递到方法 - 任何地方。这里的await 关键字几乎看起来像\xe2\x80\x99 一样充当参数修饰符,例如ref、out、in。

\n

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

\n

我正在浏览的教程:

\n

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

\n

Ste*_*ary 5

\n

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

\n
\n

这并不罕见。正如另一位评论者指出的那样,await出于可调试性或可读性的原因,关键字通常被分成单独的行。但这种用法我已经见过很多次了。

\n

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

\n
var x = (await SomethingAsync()).Property;\n
Run Code Online (Sandbox Code Playgroud)\n
\n

这里的await 关键字几乎看起来像\xe2\x80\x99 一样充当参数修饰符,例如ref、out、in。

\n
\n

我认为它只是看起来那样,因为它不熟悉并且颜色像编辑器中的关键字一样。await- like new- 是表达式中存在的关键字。

\n
\n

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

\n
\n

对你来说是新的。

\n

在最初的asyncCTP 中,await表达式无法正常工作,必须将其拆分为单独的语句。但在官方async支持发布之前,该限制已被删除,因此await从第一天起就支持表达式(忽略预发布)。

\n