如何可靠地管理后台请求?

发布于 2024-10-27 08:58:36 字数 561 浏览 3 评论 0原文

我需要对 http 服务器异步运行查询并处理响应。该查询实际上是一个相当大的带有回调的方法调用链。这增加了复杂性,因为调用链中有很多返回路径。

在当前请求完全完成之前,不应启动新请求。

概要如下:

  1. 某些线程调用 [Foo poll]
  2. poll 方法启动几个在后台运行的 HTTP 请求。在本例中为 ASIHTTPRequest。
  3. 请求最终调用[Foo onRequestComplete]来解析响应。发生错误时,调用 [Foo onRequestError]。这是第二条返回路径。
  4. 然后,通过回调和更多返回路径对服务器进行更多调用。
  5. 最终将一些东西保存到磁盘上。
  6. 轮询已完成

这里有一个要点:在这些步骤中,对 poll 的调用应被忽略(返回)或阻止,直到轮询完成。

如何确保在另一个轮询运行时轮询功能被阻止或无操作?

I need to asynchronously run a query against a http server and handle the response. The query is really a pretty large chain of method calls with callbacks. This adds complexity because there are a lot of return paths during the chain of calls.

It should not be possible to start a new request until the current one is completely completed.

Here is the general outline:

  1. Some thread calls [Foo poll].
  2. The poll method starts a couple of HTTP requests which runs in the background. In this case ASIHTTPRequest.
  3. The requests eventually calls [Foo onRequestComplete] which parses the response. On error [Foo onRequestError] is called. This is a second return path.
  4. Then more calls are done to the server, with callbacks and more return paths.
  5. Eventually saving some stuff to disk.
  6. The poll is complete

Here is the catch: During these steps, calls to poll should be ignored (returned) or blocked until the poll is complete.

How can you make sure the poll function blocks or no-ops while another poll is running?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

挽清梦 2024-11-03 08:58:36

只需使用 NSLock 即可。

[Foo poll]中:

if ([lock tryLock]) {
    // Do your stuff
}

[Foo onRequestComplete]中:

[lock unlock];

Simply use NSLock.

In [Foo poll]:

if ([lock tryLock]) {
    // Do your stuff
}

In [Foo onRequestComplete]:

[lock unlock];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文