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方法异步