diff --git a/MapControl/Shared/ImageLoader.cs b/MapControl/Shared/ImageLoader.cs
index cf8c6351..78b9e2ed 100644
--- a/MapControl/Shared/ImageLoader.cs
+++ b/MapControl/Shared/ImageLoader.cs
@@ -23,7 +23,7 @@ namespace MapControl
///
/// The System.Net.Http.HttpClient instance used to download images via a http or https Uri.
///
- public static HttpClient HttpClient { get; set; } = new HttpClient();
+ public static HttpClient HttpClient { get; set; } = new HttpClient { Timeout = TimeSpan.FromSeconds(10) };
public static async Task LoadImageAsync(Uri uri)
@@ -64,11 +64,25 @@ namespace MapControl
try
{
- using (var responseMessage = await HttpClient.GetAsync(uri).ConfigureAwait(continueOnCapturedContext))
+ using (var responseMessage = await HttpClient
+ .GetAsync(uri, HttpCompletionOption.ResponseHeadersRead)
+ .ConfigureAwait(continueOnCapturedContext))
{
if (responseMessage.IsSuccessStatusCode)
{
- response = await HttpResponse.Create(responseMessage, continueOnCapturedContext);
+ IEnumerable tileInfo;
+
+ if (responseMessage.Headers.TryGetValues("X-VE-Tile-Info", out tileInfo) &&
+ tileInfo.Contains("no-tile"))
+ {
+ response = new HttpResponse(null, null); // no tile image
+ }
+ else
+ {
+ response = new HttpResponse(
+ await responseMessage.Content.ReadAsByteArrayAsync().ConfigureAwait(continueOnCapturedContext),
+ responseMessage.Headers.CacheControl?.MaxAge);
+ }
}
else
{
@@ -86,21 +100,13 @@ namespace MapControl
internal class HttpResponse
{
- public byte[] Buffer { get; private set; }
- public TimeSpan? MaxAge { get; private set; }
+ public byte[] Buffer { get; }
+ public TimeSpan? MaxAge { get; }
- internal static async Task Create(HttpResponseMessage message, bool continueOnCapturedContext)
+ public HttpResponse(byte[] buffer, TimeSpan? maxAge)
{
- var response = new HttpResponse();
- IEnumerable tileInfo;
-
- if (!message.Headers.TryGetValues("X-VE-Tile-Info", out tileInfo) || !tileInfo.Contains("no-tile"))
- {
- response.Buffer = await message.Content.ReadAsByteArrayAsync().ConfigureAwait(continueOnCapturedContext);
- response.MaxAge = message.Headers.CacheControl?.MaxAge;
- }
-
- return response;
+ Buffer = buffer;
+ MaxAge = maxAge;
}
}
}