2013-01-23 76 views
1

this示例中,創建一個異步請求,並在完成時從其回調中創建另一個異步請求。當第二個回調完成時,我怎麼能從第一個線程(主)通知?通常我會監視IAsyncResult,但第二個請求的創建不在第一個線程的範圍內完成,所以我無法訪問它。如果異步請求的AsyncCallback已完成,如何通知您?

+0

您使用的是什麼版本的.NET?你有權使用TPL嗎? – Servy

+0

單聲道2.6這大致相當於.net 3.5 – Ford

回答

1

解決這個問題的最簡單方法可能不是這樣做 - 第二個回調可以同步(使用GetResponse而不是BeginGetResponse),那麼您可以只監視IAsyncResult。

或者,你也可以用同樣的方法,他們用它來保持主線程結束:創建另一個

private static ManualResetEvent allDone = new ManualResetEvent(false); 

然後在第一個回調

allDone.WaitOne(); 

使用和調用

allDone.Set(); 

第二個回調

+0

這是一個很好的觀點,謝謝。出於好奇,你知道同樣的規則是否適用於異步請求和線程一樣 - 比如使用互斥鎖的能力和什麼? – Ford

+0

我認爲所有相同的規則都適用 - 異步調用僅在線程池中產生,而不是手動完成。 –

0

您的回調函數必須發出第一個線程完成它的信號。例如,它可以使用事件來完成。 TaskCompletionSource是一個等待友好的選擇。

+0

對不起,我應該在我原來的帖子中提到我需要這個用於Mono 2.6(.net 3.5等效)。 – Ford

+0

@Ford爲什麼事件解決方案不起作用?莫諾沒有事件嗎? – usr

+0

如果main實際上是一個類的方法,並且我使用了事件,那麼是否有任何方法將事件回調與啓動其異步請求的類的實例進行匹配? – Ford

相關問題