Download a file given an url to a restricted area and a cookie container
You mentioned that the download is slower than you'd expect, I'll focus on just that for a quick review.

Look at your code here:


var percentage = (short)(bytesRead * 100 / response.ContentLength);
if (oldPercentage &lt; percentage)
{
    await reportStatus(percentage);
    oldPercentage = (short)(oldPercentage + 5);
}



Can you see why that might be slowing down your download?


await reportStatus(percentage);



You're waiting for the task reporting the status to finish before reading the rest of the stream! What if reportStatus were logging the progress to a database or doing something else really time consuming?

I think you should just execute the callback and not care when/how it finishes:

reportStatus(percentage); // Don't wait




Oh and oldPercentage is really confusing when you scan the code... I'd rename it to something like reportingThreshold.

if (percentage &gt; reportingThreshold)
{
     reportStatus(percentage);
     reportingThreshold = (short)(reportingThreshold+ 5);
}