Asynchronous 重载广播,使其不异步
我正在Julia开发一个web API访问包,遵循相当标准的REST。 它有很多方法,比如:Asynchronous 重载广播,使其不异步,asynchronous,async-await,julia,array-broadcasting,Asynchronous,Async Await,Julia,Array Broadcasting,我正在Julia开发一个web API访问包,遵循相当标准的REST。 它有很多方法,比如: post_foo(cred::ServiceCred, x, y) get_foo(cred::ServiceCred, x, y) 有时我想一次向API发布多个内容(或从中获取多个内容)。 假设我有多个ys我想post\u foo 因为我已经做了Base.broadcastable(cred::ServiceCred)=Ref(cred), 我可以做到: post_foo.(cred, "id123
post_foo(cred::ServiceCred, x, y)
get_foo(cred::ServiceCred, x, y)
有时我想一次向API发布多个内容(或从中获取多个内容)。
假设我有多个y
s我想post\u foo
因为我已经做了Base.broadcastable(cred::ServiceCred)=Ref(cred)
,
我可以做到:
post_foo.(cred, "id123", ["a", "b", "c"])
从接口的角度来看,这是非常好的。
我甚至可以做到:
post_foo.(cred, ["id1", "id2", "id3"], ["a", "b", "c"])
让它依次执行post\u foo(cred,“id1”,“a”)等
但由于这些是web请求,我花了很多时间等待响应返回。
如果我使用异步处理,它可以快得多,因为它将发送它们,而不会阻塞,直到它没有任何东西可以发送为止。
然后远程服务器将并行处理它们,并返回所有响应。
使用asyncmap
相当容易
但这不太好:
ansyncmap(["a", "b", "c"]) do y
post_foo(cred, "id123", y)
end
所以我开始思考。
如果我为我的ServiceCred
设置一个自定义,使所有处理都异步解析,然后不阻塞直到结束,该怎么办。
我认为它甚至可能会破坏更复杂呼叫的融合机制,因此,如果事情很好地结合在一起(但这可能要求有点高),所有请求在输入到达时都会立即被触发
- 这真的可能吗
- 如果没有,为什么没有呢
- 如果是这样的话,我该怎么做呢