8or*_*ris 1 vb.net asynchronous
我是 VB.NET 中使用异步的初学者。我阅读了在线帮助,但有些事情不清楚。我尝试使用tweetinvi库
我懂了:
Namespace tweet_invi
Class twitter_call
Public Shared Async Function twitter_get_user_info_from_id(id As Long) As Task
Dim userClient = New TwitterClient(ConfigurationManager.AppSettings("consumerKey"), ConfigurationManager.AppSettings("consumerSecret"), ConfigurationManager.AppSettings("accessToken"), ConfigurationManager.AppSettings("accessTokenSecret"))
Dim tweetinviUser = Await userClient.Users.GetUserAsync(id)
Dim description As String = tweetinviUser.Description
End Function
End Class
End Namespace
Run Code Online (Sandbox Code Playgroud)
以及我将启动此异步函数的模块
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim toto As Long = 1311275527223812096
Dim result = tweet_invi.twitter_call.twitter_get_user_info_from_id(toto)
End Sub
Run Code Online (Sandbox Code Playgroud)
我的问题:结果是一项任务。我如何获得描述的值?
您可以在您发布的代码中看到它。该方法的第二行执行此操作。您使用Await运算符来等待 的完成Task。
话虽如此,无论如何也得不到结果。如果你有一个同步,Sub那么它就会变成一个Function返回 a 的异步Task。在这两种情况下,该方法都没有实际价值。因此,等待这样的方法不会返回任何内容。如果您有一个Function返回类型为 的同步,那么它将成为返回一个 的T异步。等待会给你一个类型的结果。FunctionTask(Of T)T
如果你有这些方法:
Private Sub DoSomething()
'...
End Sub
Private Function GetSomething() As SomeType
'...
End Function
Run Code Online (Sandbox Code Playgroud)
那么你可以这样称呼它们:
DoSomething()
Dim someValue As SomeType = GetSomething()
Run Code Online (Sandbox Code Playgroud)
如果你有这些方法:
Private Async Function DoSomethingAsync() As Task
'...
End Function
Private Async Function GetSomethingAsync() As Task(Of SomeType)
'...
End Function
Run Code Online (Sandbox Code Playgroud)
那么你可以这样称呼它们:
Await DoSomethingAsync()
Dim someValue As SomeType = Await GetSomethingAsync()
Run Code Online (Sandbox Code Playgroud)
VB 实际上确实支持Async Sub,但您唯一应该使用它的是事件处理程序,必须声明它Sub,即您不能使用Function. Await此外,必须声明要在其中使用该运算符的任何方法Async。总之,这意味着您必须声明asClick的事件处理程序,然后您可以在其中等待异步方法:ButtonAsync Sub
Private Async Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim toto As Long = 1311275527223812096
Await tweet_invi.twitter_call.twitter_get_user_info_from_id(toto)
End Sub
Run Code Online (Sandbox Code Playgroud)
至于你发布的代码,该twitter_get_user_info_from_id方法没有用。它声明并设置一些局部变量,但对其获取的数据不执行任何操作。我怀疑该方法应该是这样的:
Namespace tweet_invi
Class twitter_call
Public Shared Async Function twitter_get_user_info_from_id(id As Long) As Task(Of String)
Dim userClient = New TwitterClient(ConfigurationManager.AppSettings("consumerKey"), ConfigurationManager.AppSettings("consumerSecret"), ConfigurationManager.AppSettings("accessToken"), ConfigurationManager.AppSettings("accessTokenSecret"))
Dim tweetinviUser = Await userClient.Users.GetUserAsync(id)
Dim description As String = tweetinviUser.Description
Return description
End Function
End Class
End Namespace
Run Code Online (Sandbox Code Playgroud)
然后你会这样称呼它:
Private Async Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim toto As Long = 1311275527223812096
Dim userInfo = Await tweet_invi.twitter_call.twitter_get_user_info_from_id(toto)
'...
End Sub
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2133 次 |
| 最近记录: |