private async void OnTaskBasedAsyncPattern(object sender, RoutedEventArgs e)
{
_cts = new CancellationTokenSource();
try
{
foreach (var req in GetSearchRequests())
{
var clientHandler = new HttpClientHandler
{
Credentials = req.Credentials
};
var client = new HttpClient(clientHandler);
foreach (var header in req.Headers)
{
client.DefaultRequestHeaders.Add(header.Key, header.Value);
}
var response = await client.GetAsync(req.Url, _cts.Token);
response.EnsureSuccessStatusCode();
// the following code can be used instead of EnsureSuccessStatusCode
//if (response.StatusCode == HttpStatusCode.Unauthorized)
//{
// MessageBox.Show(errorMessage, "Registration Needed");
// return;
//}
string resp = await response.Content.ReadAsStringAsync();
await Task.Run(() =>
{
var images = req.Parse(resp);
foreach (var image in images)
{
_cts.Token.ThrowIfCancellationRequested();
_searchInfo.List.Add(image);
}
}, _cts.Token);
}
}
catch (HttpRequestException ex) when (ex.Message.Contains("401"))
{
MessageBox.Show(errorMessage, "Registration Needed");
}
catch (OperationCanceledException ex)
{
MessageBox.Show(ex.Message);
}
}