3
Q
NEST異步調用
A
回答
2
通過使用基於任務並行庫(TPL)的方法來重寫異步調用的內部以使用異步/等待。這使得簡化異常和錯誤處理的方法變得更容易,儘管舊的TPL和新的異步/等待方法都是異步的(就異步方法而言)。
讓我們以GetAsync<T>()
爲例。呼叫的管道是:
IElasticClient.LowLevelDispatch.GetDispatchAsync<GetResponse<T>>()
IElasticLowLevelClient.GetAsync<T>()
與路由值從先前的呼叫IElasticLowLevelClient.DoRequestAsync<T>()
,一般的請求調度方法,該方法調用ITransport
的請求異步方法ITransport.RequestAsync<T>()
萃取,對於默認的Transport<TConnectionSettings>
將會:- 使用
IRequestPipelineFactory
創建IRequestPipeline
。默認值爲RequestPipeline
RequestPipeline.SniffAsync()
如果IConnectionPool
支持嗅探,則首次使用池。在SemaphoreSlim
上執行AWaitAsync()
以在第一次嗅探發生時阻塞。的節點被從羣集中選擇的與所施加的下列調用:
RequestPipeline.SniffOnStaleClusterAsync()
在事件集羣已被標記爲陳舊的先前RequestPipeline.PingAsync()
,以確保節點可以ping使用
RequestPipline.CallElasticsearchAsync<TReturn>()
撥打Elasticsearch的電話,當使用IConnection.RequestAsync<TReturn>()
創建ElasticClient以發出請求時,將使用傳遞給ConnectionSettings
的IConnection
。 .NET 4.5 +中的默認IConnection
(即全脂 CLR)爲HttpConnection
。在內部,HttpConnection
使用HttpWebRequest
,使實際的請求:- 與
HttpWebRequest.GetRequestStreamAsync()
- 寫入數據,如果必要的請求流獲得請求流使用
PostData<T>.WriteAsync()
- 使與
HttpWebRequest.GetResponseAsync()
- 構建一個HTTP請求響應流使用響應構建器的有意義的響應,
ResponseBuilder<TReturn>.ToResponseAsync()
。在這裏,響應將被反序列化爲TReturn
;對於大多數是json的響應,這將使用IElasticsearchSerializer.DerserializeAsync<TReturn>()
來反序列化響應。對於使用Json.NET的默認json序列化程序,沒有異步反序列化方法,因此異步版本僅包裝同步反序列化調用。
- 與
- 使用
這是發生了什麼一個簡要總結,希望它有助於:)
相關問題
- 1. 異步調用和異步io調用之間的差異.net
- 2. 使異步調用同步
- 3. 異步函數進行異步調用
- 4. Anko異步API調用異步
- 5. Alamofire異步調用
- 6. 異步NSURLConnection調用
- 7. 異步調用CollectionView.MoveCurrentToFirst?
- 8. ajaxForm異步調用
- 9. webservice異步調用
- 10. 異步調用dll
- 11. AndroidTestCase - 異步調用
- 12. 異步調用webservice
- 13. 異步調用與回調
- 14. 如何從非異步方法異步調用異步方法
- 15. 異步回調
- 16. C#異步套接字 - 總是調用異步回調?
- 17. 同步和異步回調
- 18. WPF調用MessageBox.Show異步
- 19. Wrangling異步chrome.history調用
- 20. HTML5中的異步調用?
- 21. Javascript異步調用鏈接
- 22. WP7中的異步調用
- 23. 多個Ajax異步調用
- 24. 用法與異步回調
- 25. wcf保證異步調用
- 26. 線程與異步調用
- 27. $ module.run $ rootScope異步調用
- 28. APDU命令異步調用
- 29. C#異步調用表單
- 30. 調用WCF方法異步