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. 異步調用
- 2. 異步調用
- 3. 異步調用
- 4. 異步調用和異步io調用之間的差異.net
- 5. 使異步調用同步
- 6. 同步異步API調用
- 7. 使異步調用同步
- 8. 異步調用異步方法
- 9. 異步調用異步委託?
- 10. Anko異步API調用異步
- 11. 異步NSURLConnection調用
- 12. 異步調用CollectionView.MoveCurrentToFirst?
- 13. webservice異步調用
- 14. 異步調用dll
- 15. 與異步調用
- 16. Django異步調用
- 17. 異步cuBLAS調用
- 18. Mongodb異步調用?
- 19. 異步調用nodeBlockForRowAtIndexPath
- 20. 異步調用webservice
- 21. AndroidTestCase - 異步調用
- 22. Alamofire異步調用
- 23. ajaxForm異步調用
- 24. 異步調用與回調
- 25. 如何從非異步方法異步調用異步方法
- 26. 異步調用使用JavaScript
- 27. 異步回調
- 28. 異步回調
- 29. 異步回調
- 30. C#異步套接字 - 總是調用異步回調?