When you use the await keyword in your code on an async method, what you're really telling the program is "Listen, you go ahead and do work, call me back when you're done (Of course, this isn't that simple, there is alot of overhead the compiler is doing for us which we dont see, you can read about it here)".
So what actually happends in your code is that
dynamic listOfCustomers = JToken.Parse(await client.GetStringAsync("http://localhost:12345/api/WebCustomers"));
yields control back to the caller, which in this case is a method called start(), which cannot be awaited since it is a Main method. start got the control back and wasn't awaited on, so the next line of code continues executing, which results in your program ending.
What you need to do is Wait() on start so it wont end when control is yielded back:
class Program
{
static void Main(string[] args)
{
start().Wait();
}
private async static void start()
{
Fixture fixture = new Fixture();
HttpClient client = new HttpClient();
dynamic listOfCustomers = JToken.Parse(await client.GetStringAsync("http://localhost:12345/api/WebCustomers").ConfigureAwait(false));
// Rest Of Code..
}