我想在rust中使用block_on,当编译到wasm时。问题是我正在使用egui,并希望将其编译到web。它的功能是同步的,我需要阻止异步功能。我尝试了async_futures,但它似乎启动了未来,但没有阻止它。
#[wasm_bindgen]
pub fn test1() {
alert("Hello, 1");
async_std::task::block_on(async {
alert("Hello, 2");
async_std::task::sleep(Duration::from_secs(5)).await;
alert("Hello, 3");
});
alert("Hello, 4");
}
字符串
输出顺序为1, 4, 2, 3
。
它不发出任何绑定,我可以用来检查它是否完成,我不能传递一个互斥锁,因为我需要在异步代码之外等待它,这是不可能的。知道怎么屏蔽吗
我期待输出1, 2, 3, 4
1条答案
按热度按时间vbopmzt11#
在网页浏览器中不可能有to run blocking code。
浏览器供应商不允许这样做。它基本上与javascript中的相同,
如果这是可能的,它将是一种在同步JavaScript函数中运行异步代码的方法(因为
test1
将从JavaScript中调用),其中is not permitted。这也是
async-std
中的一个open issue(请注意,提到pollster
似乎是不正确的,因为当我试图使用pollster::block_on
时,它在.await
ed语句上出现了故障)。