EnableTriggerComplete waits for b.done if triggering complete event
Vladimir Bauer
4 years ago
| 160 | 160 | // If bar has been incremented to the total, complete event is |
| 161 | 161 | // triggered right away. |
| 162 | 162 | func (b *Bar) EnableTriggerComplete() { |
| 163 | select { | |
| 164 | case b.operateState <- func(s *bState) { | |
| 163 | triggerComplete := make(chan bool) | |
| 164 | select { | |
| 165 | case b.operateState <- func(s *bState) { | |
| 166 | defer func() { | |
| 167 | triggerComplete <- s.triggerComplete | |
| 168 | }() | |
| 165 | 169 | if s.triggerComplete { |
| 166 | 170 | return |
| 167 | 171 | } |
| 173 | 177 | s.triggerComplete = true |
| 174 | 178 | } |
| 175 | 179 | }: |
| 180 | triggerComplete := <-triggerComplete | |
| 181 | if !triggerComplete { | |
| 182 | <-b.done | |
| 183 | } | |
| 176 | 184 | case <-b.done: |
| 177 | 185 | } |
| 178 | 186 | } |