rust 浆用块

w6lpcovy  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(132)

我想在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

vbopmzt1

vbopmzt11#

在网页浏览器中不可能有to run blocking code
浏览器供应商不允许这样做。它基本上与javascript中的相同,
如果这是可能的,它将是一种在同步JavaScript函数中运行异步代码的方法(因为test1将从JavaScript中调用),其中is not permitted
这也是async-std中的一个open issue(请注意,提到pollster似乎是不正确的,因为当我试图使用pollster::block_on时,它在.await ed语句上出现了故障)。

相关问题