ВС
Size: a a a
ВС
ВС
v, ok := slice[6]v, ok := foo.Bar.Baz[6].FuzzMB
p
ST
ST
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()
норм ли это способ диспатчить слушателей? где то я видел как на гите диспатчили всех слушателей через горутины независимо синхронная операция или нет, а мне кажется запускать отдельные треды(хоть они и легковесны) для синхронных операций не очень реализацияp
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()
норм ли это способ диспатчить слушателей? где то я видел как на гите диспатчили всех слушателей через горутины независимо синхронная операция или нет, а мне кажется запускать отдельные треды(хоть они и легковесны) для синхронных операций не очень реализацияp
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()
норм ли это способ диспатчить слушателей? где то я видел как на гите диспатчили всех слушателей через горутины независимо синхронная операция или нет, а мне кажется запускать отдельные треды(хоть они и легковесны) для синхронных операций не очень реализацияST
RS
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()
норм ли это способ диспатчить слушателей? где то я видел как на гите диспатчили всех слушателей через горутины независимо синхронная операция или нет, а мне кажется запускать отдельные треды(хоть они и легковесны) для синхронных операций не очень реализацияOn(eventName string) (<-chan Data, error)p
On(eventName string) (<-chan Data, error)RS
p
ST
ST
p
ST
RS