Fix Tokio runtime error - use std::thread instead of tokio::spawn for EventBus

This commit is contained in:
Aether 2026-02-23 21:21:28 +00:00
parent 4f9085f728
commit 653eb07444
No known key found for this signature in database
GPG Key ID: 95AFEE837E39AFD2
1 changed files with 6 additions and 6 deletions

View File

@ -2,7 +2,7 @@ use std::collections::HashMap;
use std::sync::{Arc, Mutex};
use serde_json::Value;
use tauri::{AppHandle, Manager};
use tokio::sync::mpsc;
use std::sync::mpsc as std_mpsc;
use tracing::{debug, info};
use uuid::Uuid;
@ -10,7 +10,7 @@ pub type EventHandler = Box<dyn Fn(Value) + Send + Sync>;
pub struct EventBus {
subscribers: Arc<Mutex<HashMap<String, Vec<(SubscriptionId, EventHandler)>>>>,
sender: mpsc::UnboundedSender<Event>,
sender: std_mpsc::Sender<Event>,
}
pub type SubscriptionId = String;
@ -25,13 +25,13 @@ pub struct Event {
impl EventBus {
pub fn new() -> Self {
let (sender, mut receiver) = mpsc::unbounded_channel::<Event>();
let (sender, receiver) = std_mpsc::channel::<Event>();
let subscribers: Arc<Mutex<HashMap<String, Vec<(SubscriptionId, EventHandler)>>>> = Arc::new(Mutex::new(HashMap::new()));
let subs_clone = subscribers.clone();
// Event dispatch loop
tokio::spawn(async move {
while let Some(event) = receiver.recv().await {
// Event dispatch loop (using std::thread instead of tokio::spawn)
std::thread::spawn(move || {
while let Ok(event) = receiver.recv() {
let subs = subs_clone.lock().unwrap();
if let Some(handlers) = subs.get(&event.event_type) {
for (_, handler) in handlers.iter() {