If you want to poll using async then use Task.Delay
instead of Thread.Sleep:
while (await proxy.PollServer())
{
await Task.Delay(1000);
}
return await proxy.DownloadReport();
You could, as mentioned, flip your architecture so the server will notify the clients upon completion using SignalR
: