For a fixed time step that is reasonable. All of the other strategies are made for adaptive integration.
DiscreteCallback. Make condition(u,t,integrator) = true so it happens after every step, and then affect!(integ) = (integ.u[...] = ...). You may then want to set save_positions = (false,false) in the construction of the callback so it doesn’t add extra save points.