The 'Lifetime' of particles can be 'keyframed' and any particles that are generated take on the lifetime at the time it is created. This means that you can control how long each frame's particles will exist for before dying. By pulsing the lifetime between 500 and 1 you can get the following result :

The only issue here is that the Lifetime cannot be reduced below zero - so the particles will always exist for at least one frame. If the emitter is visible then you will see each particle created during the 'off' pulse briefly appearing before disappearing on the next frame.
The solution to these transient particles is to simply hide them by placing a mesh to cover the emitter such that the particles can pass through unaffected :

EDIT: As pointed out by @GordonBrinkmann, while this does work in the viewport, it fails to render as the particles are incorrectly handled as if they expired at the point the Lifetime keyframes back down to '1'. This is the case even if the particle system is first Baked. This would appear to be a bug in Blender.
However, on investigating further, while Blender 2.93 Alpha compiled on 23/3/2021 does exhibit the problem, the latest daily build of Blender 3.00 Alpha as of 4/5/2021 does appear to work correctly. This would seem to indicate the the bug with the handling of keyframed Lifetime appears to have been very recently fixed.
You still do have the problem of the particles existing for 1 frame (the same problem as experienced by Gordon) but that can be hidden behind an additional mesh as described above.
EDIT2: There are some discrepancies between how this operates in Eevee and Cycles and also depending on the start 'lifetime' and how it interacts at the end of the simulation. This all points to some buggy behaviour when manipulating the lifetime in this way. IMO this makes this an unreliable solution at present but I'll put together a bug report to the Blender developers - hopefully this can be resolved at some release in the future. For now, go with @GordonBrinkmann's excellent solution as that requires slightly more setup but should be far more reliable.