9个版本 (5个重大更新)
0.6.2 | 2023年9月12日 |
---|---|
0.6.1 | 2023年8月30日 |
0.5.0 | 2023年5月6日 |
0.4.0 | 2023年5月1日 |
0.1.0 | 2023年4月29日 |
#453 in 异步
每月下载量 90
在 2 个crate中使用(通过async-rusqlite)
20KB
371 行
Asyncified
一个小巧、无依赖、运行时无关的Rust库,用于将需要在一个阻塞线程中操作的东西,使其在异步上下文中多个任务中可用。
use asyncified::Asyncified;
// We can construct some blocking thing in a new thread:
let async_conn = Asyncified::new(|| database::connection());
// And then we can run blocking code which is handed a mutable reference
// to this thing, and await the result in a non-blocking way from our
// async context:
let res = async_conn.call(|db_conn| {
let res = db_conn.execute("SELECT * FROM foo");
res
}).await;
调用 Asyncified::new()
为该值创建一个新的线程。该线程将保持活跃,直到所有的 Asyncified
实例被丢弃。使用 .call()
将函数调度到这个新线程,在阻塞上下文中按顺序运行。
传递给 Asyncified::new()
的值必须为 Send + 'static
才能发送到这个新线程,但不需要为 Sync
,因为它只在这个线程上访问。
警告:用于从同步线程发送函数并接收结果的通道实现是原始的。在快速测试中,更新值并返回所需的时间在几个微秒的量级,所以对于目前的需求来说已经足够好了,因为它预计会与数据库连接等东西一起使用,这些将会使这种开销显得微不足道。