首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是非阻塞Rest客户端?

什么是非阻塞Rest客户端?
EN

Stack Overflow用户
提问于 2014-09-03 21:17:55
回答 1查看 2.3K关注 0票数 4

我已经经历了很多东西来解释非阻塞和异步I/O之间的细微差别,但大多数似乎都与服务器端编程有关。这似乎也是有道理的。但是,就Rest客户端而言,非阻塞和异步I/O之间是否存在相关性?

我已经在网上花了很多时间,但恐怕我仍然无法掌握其中的区别,或者更确切地说,无法理解拥有一个非阻塞Rest客户端的意义。我更关心泽西的客户。是的,API说它支持异步客户端,并且可以使用Future.isDone() (引用:https://jersey.java.net/documentation/latest/async.html)来避免对Future对象的阻塞"get“调用,但是如果我的Rest客户端发出Post请求,该如何处理呢?它只是异步的,还是异步和非阻塞的?如果有人能帮我一个洞察力,我将不胜感激。

感谢并致以问候

EN

回答 1

Stack Overflow用户

发布于 2020-01-04 15:06:29

我推荐阅读这篇来自微软的关于这个主题的article

无论是发生在服务器端还是发生在客户端,术语“非阻塞”的含义都是一样的。正如上面的文章所指出的,阻塞意味着您进行调用的线程会停止处理,直到调用完成。本文中描述的Task async模式使得等待Rest调用而不是阻塞线程成为可能。通常,如果一个方法返回一个Task,并且该方法的后缀是async,那么它将是一个非阻塞调用。这意味着它可以与其他调用并发运行,因此调用不需要按顺序运行。它们可以并行运行。

这里有一个例子,其中非阻塞rest调用是并行进行的,并被等待,这样它们就不会相互阻塞。没有并行的简单for循环也会达到同样的结果,因为它将按顺序启动调用,但不会阻塞每个调用。

代码语言:javascript
运行
复制
var tasks = new List<Task<Response<Person>>>();

var client = clientFactory.CreateClient();

for (var i = 0; i < 100; i++)
{
    tasks.Add(client.GetAsync<Person>(new Uri("JsonPerson", UriKind.Relative)));
}

var results = await Task.WhenAll(tasks);

Full code

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25645430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档