V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  fakeshadow  ›  全部回复第 2 页 / 共 15 页
回复总数  296
1  2  3  4  5  6  7  8  9  10 ... 15  
我认为你需要自己弄个论坛
还有就是如果只需要单体观测的话可以使用 tokio::sync::watch::channel.
你好,建议朋友附上`Cargo.tmol`以及最小化例子,这样能提高获得答案的几率。我把你的例子缩小了一下,并且给了出一个解决方案。
```
use notify::{RecursiveMode, Watcher};
use notify_debouncer_full::{new_debouncer, DebounceEventResult};
use std::{path::Path, time::Duration};

#[tokio::main]
async fn main() {
let (tx, mut rx) = tokio::sync::mpsc::unbounded_channel();

let mut watcher = new_debouncer(
Duration::from_secs(3),
None,
move |result: DebounceEventResult| {
let _ = tx.send(result);
},
)
.unwrap();

let path = Path::new("D:\\temp\\TestNote.txt");

watcher
.watcher()
.watch(&path, RecursiveMode::Recursive)
.unwrap();

watcher.cache().add_root(&path, RecursiveMode::Recursive);

while let Some(events) = rx.recv().await.transpose().unwrap() {
println!("{events:?}");
}
}

```
你的问题本质看上去像是同步和异步的协同问题。我们一般可以采用`unbounded_channel`来让同步端无阻塞唤醒异步端,这个和你的代码基本上是等效的,这个方法有一个缺点就是异步端如果消费不及时,可能造成内存溢出。另一种方法是使用`tokio::sync::mpsc::Sender::blocking_send`方法,堵塞你的 debounder 线程来唤醒异步端,这个方法虽不会有内存泄漏的问题但消费端不及时会造成 debouncer 线程的阻塞。
我就种不出这样的好韭菜
248 天前
回复了 yaott2020 创建的主题 程序员 感觉 rust 门槛太高了
建议同 c/cpp 对照学习,从 gc 语言入手 rust 很容易出现不知所以然的现象。
你这是 LGBT 上头了吗?"That's offensive"
以就业为目的不要学 rust
自我意识过剩
287 天前
回复了 ScottHU 创建的主题 程序员 是时候该换掉你的 axios 了
安定的 backfire
2023-03-09 04:27:43 +08:00
回复了 telami 创建的主题 程序员 ChatGPT 会取代什么职业❓
哪个行业反弹最强烈
我觉得话题并不重要,你朋友的重点是没啥本事的人别来教育我。人微言轻。
2023-02-23 08:03:28 +08:00
回复了 jianghaizhi 创建的主题 NAS HTC 的下场,就是群晖最终的归宿
你是说小型 nas 十年以内就会死?不要逗好吗
1  2  3  4  5  6  7  8  9  10 ... 15  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1018 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 39ms · UTC 19:44 · PVG 03:44 · LAX 12:44 · JFK 15:44
Developed with CodeLauncher
♥ Do have faith in what you're doing.