2013-12-10 71 views
0

我想在一個方法中運行一個任務並返回Task產生的值,我該怎麼做呢?如何返回一個Threading.Task(布爾型)的值

這就是我想:

Private function blahblahblah as boolean 

    Return Threading.Tasks.Task.Factory.StartNew(Of Boolean)(
     Function() As Boolean 
      For X As Integer = 0 To RetryInterval 
       NetworkAvaliable(String.Format(NoWebsiteRetryMessage, RetryInterval - X), True, StatusControl) 
      Next 
      Return False 
     End Function) 

End Function 

重要的是要澄清,我想這樣做沒有外界的方法,如創建其他變量例如是這樣的:

dim value as boolean 

Private function blahblahblah as boolean 

    Threading.Tasks.Task.Factory.StartNew(Of Boolean)(
     Function() As Boolean 
      For X As Integer = 0 To RetryInterval 
       NetworkAvaliable(String.Format(NoWebsiteRetryMessage, RetryInterval - X), True, StatusControl) 
      Next 
      value = False 
     End Function) 

    Return value 

End Function 

我想避免這樣的事情。

+0

那麼你* *開始一個任務 - 但你不會知道結果,任務產生,直到它完成,你願意嗎?這是開始任務的關鍵。你真的需要考慮你的方法何時會返回,什麼時候你的任務會完成。 –

+0

我想知道Return語句將等待返回的「對象」...例如,當你返回一個String.Split時,首先將字符串分割,然後在分割返回之後......真的,如果這是一個原因downvote ......好吧。 – ElektroStudios

+0

是的,但'TaskFactory.StartNew'旋轉了一個新的任務。這就是它的重點。如果你不想讓代碼單獨運行,爲什麼你會使用新的任務?我認爲你需要仔細考慮任務的性質以及你真正想要達到的目標。 –

回答

3

使用異步/恭候

Private Async Sub callBlahBlahBlah() 
    Dim result = Await blahblahblah() 
End Sub 

Private Function blahblahblah() As Task(Of Boolean) 
    Return Threading.Tasks.Task.Factory.StartNew(Of Boolean)(
     Function() As Boolean 
      For X As Integer = 0 To RetryInterval 
       NetworkAvaliable(String.Format(NoWebsiteRetryMessage, RetryInterval - X), True, StatusControl) 
      Next 
      Return False 
     End Function) 
End Function