我聲明瞭一個應該異步運行Task
的方法,然後當Task
完成時,同步運行指定的代理。如何同步運行一個延續任務?
C#例如:
private void WaitUntilLoadedAsync(Process p, Action callback, int timeout = 1500)
{
Task.Factory.StartNew(() => ProcessUtil.WaitUntilLoaded(p, timeout)).
ContinueWith(() => callback.Invoke()).RunSynchronously();
}
VB.Net示例:
Private Sub WaitUntilLoadedAsync(ByVal p As Process,
ByVal callback As Action,
Optional ByVal timeout As Integer = 1500)
Task.Factory.StartNew(Sub() ProcessUtil.WaitUntilLoaded(p, timeout)).
ContinueWith(Sub() callback.Invoke()).RunSynchronously()
End Sub
然而,RunSynchronously
方法引發System.InvalidOperationException
異常特靈我說的延續Task
不能synchronouslly跑去。
那麼,我該怎麼做呢?
說明(S):
我能夠支持
Async
/Await
解決方案。我會保留我的方法的「微小」邏輯或圈複雜度,我的意思是,這只是一種方法,我通過一個
Acton
,沒有委託在方法或其他可能導致最終用戶寫入的數量多於Action
。該方法本身應該使所有必需的操作自動化,以同步執行該繼續任務,而不需要外部的複雜性。
當你說「同步」時,你的意思是與第一項任務有關嗎?或者與'WaitUntilLoadedAsync'方法有關? –
@Yacoub馬薩德感謝您的評論。在代碼塊中有兩個任務,第一個任務調用** ProcessUtil.WaitUntilLoaded **方法,第二個任務(延續任務)調用指定的** Action **。當第一個任務異步完成時,我將同步調用** Action **。 – ElektroStudios
是的,但在這種情況下意味着什麼?繼續任務將只在原始任務完成後運行。所以如果你想讓它與第一個任務同步,那麼你已經擁有它,而不需要'RunSynchronously'調用。 –