.net 异步函数返回任务(字符串)还是字符串?

.net 异步函数返回任务(字符串)还是字符串?,.net,vb.net,task-parallel-library,async-await,.net,Vb.net,Task Parallel Library,Async Await,我正在学习,我想知道.NET的哪些功能允许将此方法中的结果隐式转换为或解释为任务(字符串): 首先,如果等待pipeReader.ReadLineAsync()“返回”一个任务(字符串),为什么我可以将其分配给声明为字符串的结果 第二,尽管返回类型是Task(Of String),但为什么我可以说返回结果,该特性是TAP本身(基于任务的异步模式)或异步等待,这是它的主要名称。async关键字告诉编译器生成一个状态机,因此您可以使用wait。它还生成一个任务(如果有结果值),或者在方法运行时可能出

我正在学习,我想知道.NET的哪些功能允许将此方法中的
结果
隐式转换为或解释为
任务(字符串)

首先,如果
等待pipeReader.ReadLineAsync()
“返回”一个
任务(字符串)
,为什么我可以将其分配给声明为字符串的
结果

第二,尽管返回类型是
Task(Of String)
,但为什么我可以说
返回结果
,该特性是TAP本身(基于任务的异步模式)或
异步等待
,这是它的主要名称。
async
关键字告诉编译器生成一个状态机,因此您可以使用
wait
。它还生成一个
任务
(如果有结果值),或者在方法运行时可能出现的任何异常

在您的例子中,
pipeReader.ReadLineAsync()
返回一个
任务(字符串)
,而不仅仅是
String
Wait
使您能够在任务完成时“提取”该任务的实际结果

当您自己返回
result
时,编译器知道生成一个
任务(字符串)
,当等待的结果是
字符串(或者异常,如果存在的话)

关键字

Async
告诉编译器,您将假装返回一个
字符串
,它需要处理实际返回一个最终将生成字符串的任务这一事实的复杂性


Await
只能在
Async
方法中使用,它告诉编译器下一个表达式将返回一个生成某些内容的
Task
,并且编译器需要解决假装在这一点之后的其余代码被赋予任务将返回的内容的复杂性(本例中为
String

对于第一个问题,不是
等待pipeReader.ReadLineAsync()
返回
任务
,而是
pipeReader.ReadLineAsync()
方法本身。如果对它执行
等待
,则会得到执行结果


其次,通过
async
修饰,从应该返回
Task
的方法返回字符串,这表明编译器将为您进行此转换。

@I3arnon——我删除了您的VB.NET标记。我的示例在VB.NET中,但我的问题同样适用于C#(或任何其他CLR语言)。没关系。标记不限制暴露,它扩展了暴露。大多数.Net问题与语言无关,但它们仍然使用它们所使用的语言进行标记。@I3arnon--Gotcha。我重新添加了它。为什么要将其限制为最多5个标记?这是meta的问题,但5可能就足够了。
Public Async Function CheckHostInstructionAsync() As Task(Of String)
    Dim result As String
    result = Await pipeReader.ReadLineAsync() 'pipeReader is a System.IO.StreamReader
    If (result.Equals("exit", StringComparison.InvariantCultureIgnoreCase)) Then terminate = True
    Return result
End Function