Zendeli took the lead off the line from poleman Ben Barnicoat, as the Carlin dropped to third. Alex Peroni had a poor start after contact with Alexander Smolyar saw him with a damaged front wing on the first lap. Both went into the pits as Smolyar suffered a puncture.
The racing resumed on lap six, with Viscaal keeping pressure on leader Zendeli. The ART was unchallenged from the lead, but Viscaal kept close behind.
Liam Lawson and Oscar Piastri touched coming through Club, pushing Oscar Piastri off the circuit and down the order. Further down, Peroni was handed a ten-second time penalty for his earlier contact with Smolyar.
Barnicoat was the next driver to hit issues and slide down the order, pulling off the road ar Stowe after starting on pole position, deploying a virtual safety car in the process.
Zendeli once again held onto the lead as the race restarted, as Pourchaire, Beckmann and Lawson battled behind for third, while Piastri stayed ahead of his Prema teammate Vesti for seventh.
Lawson moved up to fourth after Beckmann ran wide at Stowe while trying to overtake Pourchaire, the French driver being shown the black and white flag for weaving on the Hangar Straight.
A series of fastest laps edged Viscaal towards striking distance for the victory over Zendeli in the closing laps. Hughes lost two positions, being past by both Premas on the final lap, as Viscaal took the lead on the run up to Copse.
Viscaal took his first F3 win after a last-lap dogfight with Zandeli, the pair side by side until the final corner, with Viscaal just pulling forward to take his first victory.
Bahrain International Circuit - Winter testing