refactoring: total bar waits for last doneTasks update
Vladimir Bauer
3 years ago
| 59 | 59 | tasks[i].bar = bar |
| 60 | 60 | } |
| 61 | 61 | |
| 62 | tb := p.AddBar(int64(total), | |
| 62 | tb := p.AddBar(0, | |
| 63 | 63 | mpb.PrependDecorators( |
| 64 | 64 | decor.Any(func(st decor.Statistics) string { |
| 65 | var done uint32 | |
| 66 | if st.Completed { | |
| 67 | done = uint32(len(tasks)) | |
| 68 | } else { | |
| 69 | done = atomic.LoadUint32(&doneTasks) | |
| 70 | } | |
| 71 | return fmt.Sprintf("TOTAL(%d/%d)", done, len(tasks)) | |
| 65 | return fmt.Sprintf("TOTAL(%d/%d)", atomic.LoadUint32(&doneTasks), len(tasks)) | |
| 72 | 66 | }, decor.WCSyncWidthR), |
| 73 | 67 | ), |
| 74 | 68 | mpb.AppendDecorators( |
| 76 | 70 | ), |
| 77 | 71 | ) |
| 78 | 72 | |
| 73 | tb.SetTotal(int64(total), false) | |
| 74 | ||
| 79 | 75 | for _, t := range tasks { |
| 80 | 76 | atomic.StoreUint32(&curTask, uint32(t.id)) |
| 81 | 77 | complete(tb, t) |
| 82 | 78 | atomic.AddUint32(&doneTasks, 1) |
| 83 | 79 | } |
| 80 | ||
| 81 | tb.EnableTriggerComplete() | |
| 84 | 82 | |
| 85 | 83 | p.Wait() |
| 86 | 84 | } |