gpt4 book ai didi

c# - NEST 异步调用

转载 作者:行者123 更新时间:2023-11-30 16:49:46 25 4
gpt4 key购买 nike

根据 this link ,NEST 2.0 内部结构刚刚转移到完全成熟的异步/等待实现。

这是否意味着 NEST 2.0 在内部以完全异步的方式工作?

如果不是,我们在调用NEST API时是否应该使用async?

最佳答案

异步调用的内部结构已从使用基于任务并行库 (TPL) 的方法重写为使用 async/await。这使得简化异常和错误处理方法变得更加容易,尽管旧的 TPL 和新的异步/等待方法都是异步的(就公开的异步方法而言)。

我们以GetAsync<T>()为例举个例子。调用管道是:

  1. IElasticClient.LowLevelDispatch.GetDispatchAsync<GetResponse<T>>()
  2. IElasticLowLevelClient.GetAsync<T>()使用从上一次调用中提取的路由值
  3. IElasticLowLevelClient.DoRequestAsync<T>() ,调用 ITransport 的通用请求调度方法的请求异步方法
  4. ITransport.RequestAsync<T>() , 默认为 Transport<TConnectionSettings>将:

    1. 创建一个 IRequestPipeline使用 IRequestPipelineFactory .默认值为 RequestPipeline
    2. RequestPipeline.SniffAsync()如果 IConnectionPool 第一次使用池支持嗅探。 WaitAsync()SemaphoreSlim 上执行在这里阻止第一次嗅探发生。
    3. 从集群中选择一个节点并应用以下调用:

      1. RequestPipeline.SniffOnStaleClusterAsync()如果集群之前已被标记为陈旧
      2. RequestPipeline.PingAsync()确保节点可以ping通
      3. 使用 RequestPipline.CallElasticsearchAsync<TReturn>() 调用 Elasticsearch这将使用 IConnection传递给 ConnectionSettings创建 ElasticClient 以使用 IConnection.RequestAsync<TReturn>() 发出请求时.默认 IConnection在 .NET 4.5 + 中(即 full fat CLR)是 HttpConnection .在内部,HttpConnection使用 HttpWebRequest提出实际要求:

        1. 使用HttpWebRequest.GetRequestStreamAsync() 获取请求流
        2. 必要时使用PostData<T>.WriteAsync()将数据写入请求流
        3. 使用 HttpWebRequest.GetResponseAsync() 发出 HTTP 请求
        4. 使用响应构建器从响应流构建有意义的响应,ResponseBuilder<TReturn>.ToResponseAsync() .在这里,响应将被反序列化为 TReturn ;对于大多数 json 响应,这将使用 IElasticsearchSerializer.DerserializeAsync<TReturn>()反序列化响应。对于使用 Json.NET 的默认 json 序列化程序,没有异步反序列化方法,因此异步版本只是简单地包装了同步反序列化调用。

这是对所发生情况的简要总结,希望对您有所帮助:)

关于c# - NEST 异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36017819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com