Re:State of Loom
by toast0 on Saturday May 16, 2020 @09:30PM
(#23208682)
In my experience with C#, I ran into apis I wanted to call that were async. I couldn't call them, even as Result foo = await async_thing(), unless my function was marked as async. I don't remember having a problem calling sync functions from async functions though.
[ Parent
| on HN ]
afaik sync can call async if the language allows you to make an executor/event-loop. e.g. with python's asyncio it'd be something like
def sync_foo():
task = async_bar()
loop = asyncio.new_event_loop()
return loop.run_until_complete(task)
after all, unless the loop is built into the language (like JS), you need bootstrap the async code somehowYou can just use:
task.RunSynchronously()
mildly annoying but far from impossibly split.But now you’re blocking the thread, so if this function is being used by an async function higher up in the function chain, it’s no longer async (unless that is changed as well.
There’s a split, because every step of an async process has to be async/await compatible or you lose all benefit. In a small code base, this might not be a big problem. Where I work it will never realisticly be done.
With project loom we won’t have to do anything or learn anything new. Just upgrade the java runtime and everything just works better :)
And use a different executor.
But yeah, the magic is: All code is now implicitly async (except native calls) - as if all code always had async in it's signature. Just - there is no need to now add this to the signature.