Simple web service call with retries
In general if you have a goto statement, you should reorder your code to not need it. In this case, your code actually tries 9 times, not three, because you await client.GetAsync 3 times, and then jump back to your goto label up to 3 times.

The simple fix in this case is to remove the extra response=await... calls, enclose the entire try/except block in a loop and break or return if the call is successful. Something like:

for (int i = 0; i &lt; 3; i++){
    try
    {
        HttpResponseMessage response = await client.GetAsync("jobs/" + id);
    }
    catch (CantConnectExcept as ex){
        await Task.Delay(2000);
        continue;
    }

    if (!response.IsSuccessStatusCode){
        await Task.Delay(2000);
        continue;
    }

    jobJson = await response.Content.ReadAsStringAsync();
    return JsonConvert.DeserializeObject&lt;Job&gt;(jobJson);
}
return null


It doesn't sound like waiting more seconds on later failures is important. If you find it is important, you can do something like:

List&lt;int&gt; waitTime = new List&lt;int&gt; {2000, 2000, 7000};
...
await Task.Delay(waitTime[i]);