i would have OnGotLevel2Record() put the message onto an internal queue and then have multiple reader threads taking messages off that queue. basic producer/consumer pattern