De finale begon met twee renners van Team CCC voorop, namelijk Michael Schär en Nathan Van Hooydonck. Ook Mathieu van der Poel liet zich in de koers zien met een demarrage, maar de topfavoriet voor het wereldkampioenschap kwam niet weg. Achter Schär en Van Hooydonck namen onder meer Deceuninck-Quick Step en Bora-Hansgrohe het initiatief om het tot een sprint te laten komen in dienst van Fabio Jakobsen en Ackermann.
De Zwitser en Belg hielden weliswaar moedig stand, maar tegen het jagende peloton was uiteindelijk niets te beginnen. Ze werden dan ook tijdig ingerekend. De sprintersploegen bleven vervolgens op kop van het peloton, maar zagen op zo'n zeven kilometer van de meet Jasper Stuyven ten aanval trekken. Gebrand op revanche vanwege het missen van het wereldkampioenschap sloeg hij een mooi gat. Achter de aanval van Stuyven bleek een heel plan te zitten, want zijn ploegmaat Theuns maakte na zo'n drie kilometer de oversteek.
De coureurs van Trek-Segafredo bleven nog even samen. Stuyven deed een ferme beurt, maar moest niet veel later zijn ploegmaat laten gaan. Achter Theuns was er lange tijd geen organisatie. Sagan wilde het gat in zijn eentje dichtrijden, maar dat lukte niet. Doordat er te lang getreuzeld werd, ging Theuns met een mooie voorsprong de slotkilometer in.
Hoewel de sprinters nog heel dichtbij kwamen, kon Theuns de sterk opkomende Ackermann nipt afhouden. Jasper De Buyst completeerde het podium. Beste Nederlander was Dylan Groenewegen op een vierde plaats. Voor Theuns was het zijn eerste overwinning sinds oktober 2017. Toen zegevierde hij in een etappe in de Tour of Turkey.
#PrimusClassic - Top 10 pic.twitter.com/8R3Raa5QfU
— La Flamme Rouge (@laflammerouge16) September 21, 2019