AsyncPatternsWPF.MainWindow.OnTaskBasedAsyncPattern C# (CSharp) Method

OnTaskBasedAsyncPattern() private method

private OnTaskBasedAsyncPattern ( object sender, RoutedEventArgs e ) : void
sender object
e System.Windows.RoutedEventArgs
return void
        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);
            }
        }