我已經偶然發現了這個問題多次,主要是用黑客解決它,但希望看到一個「proprer」的方式來做到這一點。C#阻止等待響應
我正在寫一個通信協議,與我的端點詢問「查詢」的方式非常類似於RPC,他們收到「答覆」。
現在...我想實現一個名爲SendCommand的函數,它將發出一個查詢,然後等待對該問題的回覆,並將其返回。
所以我可以做類似
int outside_temp = SendCommand(What is the temperature outside).ToInt();
這樣做的問題是,消息發送和異步接收的,而我由一個新的消息,事件,和它是什麼通知。我需要阻止線程,直到對提到的查詢的回覆已到達,提取其數據內容並將其返回給調用者。
我的問題是阻塞線程。阻塞線程不是問題,我們正在討論一個多線程應用程序,所以用戶界面不會凍結等,但問題是實現這一目標的正確方法是什麼?
我正在考慮一些東西,在SendCommand函數內部初始化一個信號燈,等待它,並釋放收到消息的事件處理程序中的信號量(在檢查它是正確的消息之後)?
問候, axos88
你應該看看用C#5提供的異步方法。如果你可以讓你的代碼遵循基於任務的異步模式,其餘的將變得更加簡單。 –