I assume you need a steady rate of calls per second (that is, you need 400 calls per second distributed evenly over the second as much as possible).
You need adaptive delays during your test - if your server sends responses slowly, you need less delay; when the server is fast, you need more delay between calls. You can keep track of past server response times and calculate the delay for the current call based on that to come as close to the 400 calls / second rate as possible. It'll still fluctuate somewhat but it'll be much better than a simple hard-coded Thread.Sleep
.
You need to keep in mind, that with many active threads (depending on hardware resources), the sleep duration of a thread may fluctuate as well. I don't know how familiar you are with the nuances of Thread.Sleep
- you should read this answer to understand the limitations, as this may play a role in scheduling your test calls.