为了在Tauri协议处理程序中调用一个Rocc函数,我成功地使用了futures::executor::block_on,如下面的SO答案所述.链接:https://stackoverflow.com/a/66280983/4802953

但是答案不鼓励使用这种技术,所以我不确定这是否是从Tauri协议处理程序中调用一个Rocc函数的推荐方法.

我的代码的简化版本如下:

#[tokio::main]
async fn main() {
    tauri::Builder::default()
        .register_uri_scheme_protocol("myprot", move |_app, req| {
            let handle = tokio::runtime::Handle::current();
            let _guard = handle.enter();

            futures::executor::block_on(async move { handle_protocol_myprot(&req).await })
        })
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

如果你可以使用Tauri 2.0(目前是beta版),有一个新的方法register_asynchronous_uri_scheme_protocol可以让你在里面调用cnc.

推荐答案

我得到了FabianLars关于金牛座discord的以下回应:

Tauri有一个更容易使用的block_on函数: https://docs.rs/tauri/latest/tauri/async_runtime/fn.block_on.html(你 可以导入它并直接调用它,而不需要句柄 第一).block_on通常是足够好的,如果任务不执行 太多时间了.

说到手柄,你得给你的主东京一个 运行时间:https://docs.rs/tauri/latest/tauri/async_runtime/fn.set.html.

如果您不需要等待结果从协议返回, 当然,你可以使用spawn来代替.

如果这两种方法都不适合你,v2将有一个rectc协议, 从生成的任务内部返回协议: https://docs.rs/tauri/2.0.0-beta/tauri/struct.Builder.html#method.register_asynchronous_uri_scheme_protocol 参考编号:https://discord.com/channels/616186924390023171/1224053280565497896

Rust相关问答推荐

为什么在Rust struct 中只允许最后一个字段具有动态大小的类型

将JSON密钥转换为Polars DataFrame

关于Rust 中回归的逻辑

rust 迹-内存管理-POP所有权-链表

使用Clap时如何将String作为Into Str参数传递?

如何正确地将App handler传递给Tauri中的其他模块?

在析构赋值中使用一些现有绑定

使用Box优化可选的已知长度数组的内存分配

用于实现获取 struct 体 id 的特征规范

类型生命周期绑定的目的是什么?

需要一个有序向量来进行 struct 初始化

为什么这个闭包没有实现Fn?

str 和 String 的 Rust 生命周期

有没有办法通过命令获取 Rust crate 的可安装版本列表?

不能将 `*self` borrow 为不可变的,因为它也被borrow 为可变的 - 编译器真的需要如此严格吗?

Rust 引用元组和引用元组

预期的整数,找到 `&{integer}`

为什么-x试图解析为文字并在声明性宏中失败?

为什么这个 Trait 无效?以及改用什么签名?

如何在 Rust 的内置函数上实现特征?