-
Hello everyone // can't actually be run from multiple threads at the same time - dangerous
MAIN_THREAD_EM_ASM({
return Asyncify.handleAsync(async () => {
await someAsyncOperationThatMustRunFromMainThread();
});
}); The problem is that if two operations happen simultanously then Asyncify goes shenaneganes (it has a state for rewind which is ruined) I believe this is the section in the docs that speaks about this problem Thanks |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 11 replies
-
@tlively what do you think about creating a variant of |
Beta Was this translation helpful? Give feedback.
I would avoid using Asyncify at all since no Wasm code needs to be suspended to make this work.
Instead of using
MAIN_THREAD_EM_ASM
, I would useproxying.h
[https://emscripten.org/docs/api_reference/proxying.h.html] to set up the proxying to the main thread yourself. Specifically, you should use theemscripten_proxy_sync_with_ctx
orProxyingQueue::proxySyncWithCtx
functions to proxy the work to the main thread, where you should call into the async JS without asyncify and arrange it so that you callemscripten_proxy_finish
when the async work is done.As an example, you can see how this code proxies work to another thread, where it is executed asyncronously in JS.