在Postgres中,我有许多SQL事务,这些事务是从不同的线程执行的,如果任何一个失败,都需要回滚所有事务
代码是这样的-
dbconn.transaction::<_, DieselError, _>( |conn| {
tokio::spawn( insert_salary_table(conn) );
tokio::spawn( insert_user_table(conn) );
tokio::spawn( insert_user_table(conn) );
}
字符串
这里的问题是,我不能从事务闭包块中借用conn对象
任何建议都会很有帮助。
注意事项:没有时雄::spawn它是工作的,但我的要求,根据用例使用一个javascript调用。我试图从runtime.block_on()调用这些javascript函数,但面临同样的错误。
1条答案
按热度按时间oogrdqng1#
你可以通过使用diesel-async crate在Diesel的事务中执行
async
操作:字符串
参考
transaction
的文档了解更多信息。因为你的函数是async
,它们应该在它们内部使用RunQueryDsl
的柴油机版本,以避免阻塞你的执行器。.从不同线程执行的事务,如果任何一个事务失败,则需要回滚所有事务。
这将不会使您的事务成为多线程的,也不可能。提供的
conn
是独占引用,因此不能同时在两个地方使用。