Implement async event streaming
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
import Inotify
|
||||
|
||||
func getEventsForTrigger(
|
||||
in dir: String,
|
||||
mask: InotifyEventMask,
|
||||
trigger: @escaping (String) async throws -> Void
|
||||
) async throws -> [InotifyEvent] {
|
||||
let watcher = try Inotify()
|
||||
try await watcher.addWatch(path: dir, mask: mask)
|
||||
|
||||
let eventTask = Task {
|
||||
var events: [InotifyEvent] = []
|
||||
for await event in await watcher.events {
|
||||
events.append(event)
|
||||
}
|
||||
return events
|
||||
}
|
||||
|
||||
try await Task.sleep(for: .milliseconds(200))
|
||||
try await trigger(dir)
|
||||
try await Task.sleep(for: .milliseconds(200))
|
||||
|
||||
eventTask.cancel()
|
||||
return await eventTask.value
|
||||
}
|
||||
Reference in New Issue
Block a user