2012-01-25 80 views
0

我爲.NET C#使用了令人敬畏的Hammock REST庫(https://github.com/danielcrenna/hammock),並且遇到了RestClient.BeginRequest問題。第一次在我的代碼中調用這個方法時,它會阻塞當前線程15秒。我印象中這個方法是一個異步操作,因爲它返回一個IAsyncResult並接受一個回調 - 它應該立即返回,對嗎?C#吊牀庫RestClient.BeginRequest阻止當前線程

我知道問題與BeginRequest有關,因爲調試會話會顯示它掛在特定的代碼行上 - 換言之,問題與Internet連接問題或REST資源與本地計算機之間的延遲無關。

我可以深入到Hammock的源代碼中,但是它很令人困惑 - 有沒有人遇到過這個問題?這只是Hammock中的一個錯誤還是它的預期行爲?我很難找到很多文檔。在此先感謝您的幫助!

回答

0

是您使用SSL/TLS連接到的終點嗎?如果是這樣,有時這些延遲可能是由客戶端試圖檢查SSL證書的撤銷列表引起的。在.NET中,您可以使用以下代碼更改吊銷模式。

client.ClientCredentials.ServiceCertificate.Authentication.RevocationMode = X509RevocationMode.NoCheck; 

我不知道你在Hammock如何做到這一點。

0

我認爲這是Dotnet webclient/httprequest的一個屬性,具體來說,它似乎在第一次請求時檢查機器的代理設置。

我發現你可以通過在app.config中明確設置代理來獲得很大的加速。或者,您可以手動在不同的線程上發出您的第一個請求。