c#: Restart an Async task after certain time passes before completion

Have you considered using a fault-resilience library? One example for .net is Polly. https://github.com/App-vNext/Polly

This is helpful because you can easily configure the retry count or the timeout as well as fallback logic for certain type of exceptions.

There is also a very helpful article by Scott Hanselman on this: https://www.hanselman.com/blog/AddingResilienceAndTransientFaultHandlingToYourNETCoreHttpClientWithPolly.aspx

I have used it before and it made my code super clean and easy to manage, since all policies are in one place, and not part of the http response handler. You can also have a separate policy for each different http requestor or client if needed.