2013-08-24 74 views
2

假設我有一個delegate,它指bar個方法。當我調用代理或者像這樣someDelegate(someParameter);或者像這樣someDelegate.Invoke(someParameter);,這個委託引用的方法實際上被一個接一個地同步調用,對嗎?有沒有辦法讓這個調用異步?C#異步調用鏈式委託方法

回答

2

您可以使用BeginInvoke而不是Invoke。這將異步地調用所有代表 - 但仍然是連續的。 (你應該再調用EndInvoke在你進入BeginInvoke回調。詳情請參閱MSDN。)

如果你要撥打的代表在平行,你可以使用MulticastDelegate.GetInvocationList單獨獲得它們,然後像​​Parallel.Invoke來調用它們。

+0

Jon,'Parallel.Invoke'不能直接與'MulticastDelegate.GetInvocationList'一起使用。 OP需要'Action'來使用'Parallel.Invoke'。糾正我,如果我錯了 –

+0

@SriramSakthivel:確切的操作將取決於原來的委託類型,我們不知道。 (我們不知道OP是否想要並行地調用它們。)這就是爲什麼我把「類似的東西」 - 如果OP想要更具體的細節,他們需要提供更具體的要求。 –

+0

+1提示「異步」和「並行」之間的區別,並指出兩者的解決方案。雖然後者的具體代碼示例('GetInvocationList')可能會有所幫助。 – stakx