我想在单独的线程上运行特定的长时间运行的函数(执行数据库查询)。但是,假设基础数据库引擎一次只允许一个连接,并且连接结构体不是
我的解决方案是有一个单独的线程(而不是线程池),所有数据库工作都在其中完成,并在主线程活动时一直运行。我知道如何通过通道传递消息来实现这一点,但是需要相当多的样板代码(例如显式发送函数参数等)。
在rust中(可能包括tokio和nightly中的新异步/等待符号),是否有更直接的方法来实现类似这样的东西?
我希望能够按照下列方式进行操作:
Sync
(我认为至少后者对于diesel
是正确的)。我的解决方案是有一个单独的线程(而不是线程池),所有数据库工作都在其中完成,并在主线程活动时一直运行。我知道如何通过通道传递消息来实现这一点,但是需要相当多的样板代码(例如显式发送函数参数等)。
在rust中(可能包括tokio和nightly中的新异步/等待符号),是否有更直接的方法来实现类似这样的东西?
我希望能够按照下列方式进行操作:
let handle = spawn_thread_with_runtime(...);
let future = run_on_thread!(handle, query_function, argument1, argument2);
这里的query_function
指的是一个可以立即返回future并在其他线程中执行工作的函数。
可以使用Rust nightly和外部crate或宏。