假设我有我在哪里加工的工人后台作业的情景。它只是接受一个网址给文件(图片,视频,PDF,..)托管在远程CDN和工人做的工作是:
现在,问题是步骤(3)和(4)之间。这里的约束是第三方API需要几秒钟就可以处理文件(步骤3)之前,我们实际上是发送一个包含我们刚刚上传的文件ID(步骤4)的消息。
这里还有一个假设是,我需要确保所有4个步骤执行一气呵成,如,不要有任何部分失败的机会。
sleep 5
步骤(3)和(4),这可能会伤害/硬故障,因为我不完全知道有多少秒没有第三方API需要处理之间,但根据我的考验, 5秒睡眠似乎是正常的。这件作品的逻辑是建立在Ruby中,虽然这个问题可能不是很红宝石特有的,可以适用于其他语言,我想听听Ruby的人认为。
您所连结的API docs地说:
注意!由一台服务器需要一些时间来处理上传的文件。文件应短暂停后发送到聊天(几秒钟)
我通常会建议对这种性质的东西,但因为你的供应商明确表示,“超时”,sleep
是最好的选择。
我想尝试做延迟的任务,因为这将允许线程继续工作(因此线程池将不再需要创建新的线程(它们是从内存方面相当昂贵),你的线程可以继续,而不需要上下文切换的执行有用的工作(这是由CPU使用侧昂贵),...)。
至于溶液纯度,异步编程应该不涉及任何阻塞的任务(我们实际上是在对抗使用异步编程拦截),所以这是一个更有理由使用延迟任务。
如果申请不涉及实现最高性能(不红宝石业绩为导向的语言?),所以睡眠可能真的是最简单的,但不是最优化的解决方案。