ror*_*.ap 5 .net vb.net task-parallel-library async-await
我正在学习TAP,我想知道 .NET 的哪些功能允许result此方法中的 隐式转换为或解释为Task(Of String):
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
Run Code Online (Sandbox Code Playgroud)
首先,如果Await pipeReader.ReadLineAsync()“返回” a Task(Of String),为什么我可以将其分配给result声明为 String 的 ?
其次,为什么我可以说Return result返回类型是Task(Of String).
关键在于Async/Await关键字。
Async告诉编译器您将假装返回 a string,并且它需要处理围绕以下事实的复杂性:您实际上返回的是最终将生成字符串的 Task 。
Await只能在Async方法中使用,它告诉编译器下一个表达式将返回Task产生某些内容的 a,并且编译器需要解决假装此点之后的其余代码给出了该内容的复杂性任务将返回(String在本例中为 a)。
该功能就是 TAP 本身(基于任务的异步模式)或async-await它的主要名称。该async关键字告诉编译器生成一个状态机,因此您可以使用await. 它还生成一个异常Task(如果有的话,则带有结果值)或该方法运行时可能出现的任何异常。
在你的情况下pipeReader.ReadLineAsync()返回 aTask(Of String)而不仅仅是String. Await是什么使您能够在任务完成时从该任务中“提取”实际结果。
当您返回result自己时,编译器知道生成一个,Task(Of String)当等待时会产生一个String(或异常,如果有的话)
| 归档时间: |
|
| 查看次数: |
3586 次 |
| 最近记录: |