го и пока неуверенно чувствую себя в горутинах
Такс, вот ситуация: мы навешиваем на событие слушателей как синхронные, так и нет
при эмите мы диспатчим слушателей, что на нашем событие висят
сейчас я реализовал, что при навешивании слушателя, последний парам отвечает синхронная ли операция
ee.On("event", handler1, true)
ee.On("event", handler2, false)
а в функции emit мы чекаем этот bool и если тру, то диспатчим горутиной, если нет то простой вызов
func asyncWrapper(f AnyListener, name string, data []interface{}, wg *sync.WaitGroup) {
defer wg.Done()
f(name, data...)
}
......................................................
var wg sync.WaitGroup
for _, listener := range ee.Events[name] {
if listener.async {
wg.Add(1)
go asyncWrapper(listener.listener, name, data, &wg)
continue
} else {
listener.listener(name, data...)
}
}
wg.Wait()
норм ли это способ диспатчить слушателей? где то я видел как на гите диспатчили всех слушателей через горутины независимо синхронная операция или нет, а мне кажется запускать отдельные треды(хоть они и легковесны) для синхронных операций не очень реализация
1. В go нет тредов 2. В go нет асинхронных операций
А зачем разделение на sync/async ?
On(eventName string) (<-chan Data, error) вот так должен выглядеть ваш регистратор обработчика
Обсуждают сегодня