Skip to content

Commit 7a6a8aa

Browse files
christophwilleDeadpikle
authored andcommitted
Turn DownloadAndGetAppCastData into an async method and use GetAwaiter().GetResult() in the original. Other things of note: libraries should always go for ConfigureAwait(false) and never use .Result unless you are sure the result is already there.
1 parent fc18a59 commit 7a6a8aa

File tree

1 file changed

+23
-19
lines changed

1 file changed

+23
-19
lines changed

src/NetSparkle/Downloaders/WebRequestAppCastDataDownloader.cs

+23-19
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,23 @@ public WebRequestAppCastDataDownloader()
4646

4747
/// <inheritdoc/>
4848
public string DownloadAndGetAppCastData(string url)
49+
{
50+
return DownloadAndGetAppCastDataAsync(url).GetAwaiter().GetResult();
51+
}
52+
53+
/// <inheritdoc/>
54+
public async Task<string> DownloadAndGetAppCastDataAsync(string url)
4955
{
5056
_appcastUrl = url;
5157
// configure ssl cert link
5258
ServicePointManager.ServerCertificateValidationCallback += ValidateRemoteCertificate;
53-
// use HttpClient synchronously: https://stackoverflow.com/a/53529122/3938401
59+
5460
var handler = new HttpClientHandler();
5561
if (RedirectHandler != null)
5662
{
5763
handler.AllowAutoRedirect = false;
5864
}
65+
5966
if (TrustEverySSLConnection)
6067
{
6168
#if NETCORE
@@ -75,49 +82,46 @@ public string DownloadAndGetAppCastData(string url)
7582
{
7683
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);
7784
request.Content = new StringContent(ExtraJsonData, Encoding.UTF8, "application/json");
78-
var postTask = Task.Run(() => httpClient.SendAsync(request));
79-
postTask.Wait();
80-
if (postTask.Result.IsSuccessStatusCode)
85+
HttpResponseMessage response = await httpClient.SendAsync(request).ConfigureAwait(false);
86+
87+
if (response.IsSuccessStatusCode)
8188
{
82-
var postTaskStream = Task.Run(() => postTask.Result.Content.ReadAsStreamAsync());
83-
postTask.Wait();
89+
Stream responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);
90+
8491
ServicePointManager.ServerCertificateValidationCallback -= ValidateRemoteCertificate;
85-
using (StreamReader reader = new StreamReader(postTaskStream.Result, GetAppCastEncoding()))
92+
using (StreamReader reader = new StreamReader(responseStream, GetAppCastEncoding()))
8693
{
87-
return reader.ReadToEnd();
94+
return await reader.ReadToEndAsync().ConfigureAwait(false);
8895
}
8996
}
9097
}
9198
else
9299
{
93100
if (RedirectHandler != null)
94101
{
95-
var task = Task.Run(() => httpClient.GetAsync(url));
96-
task.Wait();
97-
var response = task.Result;
102+
HttpResponseMessage response = await httpClient.GetAsync(url).ConfigureAwait(false);
103+
98104
if ((int)response.StatusCode >= 300 && (int)response.StatusCode <= 399)
99105
{
100106
var redirectURI = response.Headers.Location;
101107
if (RedirectHandler.Invoke(url, redirectURI.ToString(), response))
102108
{
103-
return DownloadAndGetAppCastData(redirectURI.ToString());
109+
return await DownloadAndGetAppCastDataAsync(redirectURI.ToString()).ConfigureAwait(false);
104110
}
105111
}
106112
else if (response.IsSuccessStatusCode)
107113
{
108-
var readTask = Task.Run(() => response.Content.ReadAsStringAsync());
109-
readTask.Wait();
110-
return readTask.Result;
114+
return await response.Content.ReadAsStringAsync().ConfigureAwait(false);
111115
}
112116
}
113-
else
117+
else
114118
{
115-
var task = Task.Run(() => httpClient.GetStreamAsync(url));
116-
var responseStream = task.Result;
119+
Stream responseStream = await httpClient.GetStreamAsync(url).ConfigureAwait(false);
120+
117121
ServicePointManager.ServerCertificateValidationCallback -= ValidateRemoteCertificate;
118122
using (StreamReader reader = new StreamReader(responseStream, GetAppCastEncoding()))
119123
{
120-
return reader.ReadToEnd();
124+
return await reader.ReadToEndAsync().ConfigureAwait(false);
121125
}
122126
}
123127
}

0 commit comments

Comments
 (0)