@@ -17,7 +17,7 @@ namespace SimpleFeedReader;
1717/// When true, the <see cref="FeedReader"/> will throw on errors, when false the <see cref="FeedReader"/> will
1818/// suppress exceptions and return empty results.
1919/// </param>
20- public class FeedReader ( IFeedItemNormalizer defaultFeedItemNormalizer , bool throwOnError )
20+ public class FeedReader ( IFeedItemNormalizer defaultFeedItemNormalizer , bool throwOnError ) : IFeedReader
2121{
2222 private static readonly HttpClient _httpclient = new ( ) ;
2323
@@ -58,62 +58,31 @@ public FeedReader(bool throwOnError)
5858 public FeedReader ( IFeedItemNormalizer defaultFeedItemNormalizer )
5959 : this ( defaultFeedItemNormalizer , false ) { }
6060
61- /// <summary>
62- /// Retrieves the specified feeds.
63- /// </summary>
64- /// <param name="uris">The uri's of the feeds to retrieve.</param>
65- /// <returns>
66- /// Returns a task that resolves to an <see cref="IEnumerable{FeedItem}"/> of retrieved <see cref="FeedItem"/>s.
67- /// </returns>
68- /// <remarks>This is a convenience method.</remarks>
69- public Task < IEnumerable < FeedItem > > RetrieveFeedsAsync ( IEnumerable < string > uris )
70- => RetrieveFeedsAsync ( uris , DefaultNormalizer ) ;
61+ /// <inheritdoc/>
62+ public Task < IEnumerable < FeedItem > > RetrieveFeedsAsync ( IEnumerable < string > uris , CancellationToken cancellationToken = default )
63+ => RetrieveFeedsAsync ( uris , DefaultNormalizer , cancellationToken ) ;
7164
72- /// <summary>
73- /// Retrieves the specified feeds.
74- /// </summary>
75- /// <param name="uris">The uri's of the feeds to retrieve.</param>
76- /// <param name="normalizer">
77- /// The <see cref="IFeedItemNormalizer"/> to use when normalizing <see cref="FeedItem"/>s.
78- /// </param>
79- /// <returns>
80- /// Returns a task that resolves to an <see cref="IEnumerable{FeedItem}"/> of retrieved <see cref="FeedItem"/>s.
81- /// </returns>
82- /// <remarks>This is a convenience method.</remarks>
83- public async Task < IEnumerable < FeedItem > > RetrieveFeedsAsync ( IEnumerable < string > uris , IFeedItemNormalizer normalizer )
65+
66+ /// <inheritdoc/>
67+ public async Task < IEnumerable < FeedItem > > RetrieveFeedsAsync ( IEnumerable < string > uris , IFeedItemNormalizer normalizer , CancellationToken cancellationToken = default )
8468 {
85- var tasks = uris . Select ( uri => RetrieveFeedAsync ( uri , normalizer ) ) ;
69+ var tasks = uris . Select ( uri => RetrieveFeedAsync ( uri , normalizer , cancellationToken ) ) ;
8670 await Task . WhenAll ( tasks ) ;
8771
8872 return tasks . SelectMany ( tasks => tasks . Result ) ;
8973 }
9074
91- /// <summary>
92- /// Retrieves the specified feed.
93- /// </summary>
94- /// <param name="uri">The uri of the feed to retrieve.</param>
95- /// <returns>
96- /// Returns a task that resolves to an <see cref="IEnumerable{FeedItem}"/> of retrieved <see cref="FeedItem"/>s.
97- /// </returns>
98- public Task < IEnumerable < FeedItem > > RetrieveFeedAsync ( string uri )
99- => RetrieveFeedAsync ( uri , DefaultNormalizer ) ;
75+ /// <inheritdoc/>
76+ public Task < IEnumerable < FeedItem > > RetrieveFeedAsync ( string uri , CancellationToken cancellationToken = default )
77+ => RetrieveFeedAsync ( uri , DefaultNormalizer , cancellationToken ) ;
10078
101- /// <summary>
102- /// Retrieves the specified feed.
103- /// </summary>
104- /// <param name="uri">The uri of the feed to retrieve.</param>
105- /// <param name="normalizer">
106- /// The <see cref="IFeedItemNormalizer"/> to use when normalizing <see cref="FeedItem"/>s.
107- /// </param>
108- /// <returns>
109- /// Returns a task that resolves to an <see cref="IEnumerable{FeedItem}"/> of retrieved <see cref="FeedItem"/>s.
110- /// </returns>
111- public async Task < IEnumerable < FeedItem > > RetrieveFeedAsync ( string uri , IFeedItemNormalizer normalizer )
79+ /// <inheritdoc/>
80+ public async Task < IEnumerable < FeedItem > > RetrieveFeedAsync ( string uri , IFeedItemNormalizer normalizer , CancellationToken cancellationToken = default )
11281 {
11382 try
11483 {
115- using var reader = await GetXmlReaderAsync ( uri ) ;
116- return await RetrieveFeedAsync ( reader , normalizer ) ;
84+ using var reader = await GetXmlReaderAsync ( uri , cancellationToken ) ;
85+ return await RetrieveFeedAsync ( reader , normalizer , cancellationToken ) ;
11786 }
11887 catch
11988 {
@@ -125,27 +94,12 @@ public async Task<IEnumerable<FeedItem>> RetrieveFeedAsync(string uri, IFeedItem
12594 return [ ] ;
12695 }
12796
128- /// <summary>
129- /// Retrieves the specified feed.
130- /// </summary>
131- /// <param name="xmlReader">The <see cref="XmlReader"/> to use to read the items from.</param>
132- /// <returns>
133- /// Returns a task that resolves to an <see cref="IEnumerable{FeedItem}"/> of retrieved <see cref="FeedItem"/>s.
134- /// </returns>
135- public Task < IEnumerable < FeedItem > > RetrieveFeedAsync ( XmlReader xmlReader ) =>
136- RetrieveFeedAsync ( xmlReader , DefaultNormalizer ) ;
97+ /// <inheritdoc/>
98+ public Task < IEnumerable < FeedItem > > RetrieveFeedAsync ( XmlReader xmlReader , CancellationToken cancellationToken = default ) =>
99+ RetrieveFeedAsync ( xmlReader , DefaultNormalizer , cancellationToken ) ;
137100
138- /// <summary>
139- /// Retrieves the specified feed.
140- /// </summary>
141- /// <param name="xmlReader">The <see cref="XmlReader"/> to use to read the items from.</param>
142- /// <param name="normalizer">
143- /// The <see cref="IFeedItemNormalizer"/> to use when normalizing <see cref="FeedItem"/>s.
144- /// </param>
145- /// <returns>
146- /// Returns a task that resolves to an <see cref="IEnumerable{FeedItem}"/> of retrieved <see cref="FeedItem"/>s.
147- /// </returns>
148- public Task < IEnumerable < FeedItem > > RetrieveFeedAsync ( XmlReader xmlReader , IFeedItemNormalizer normalizer )
101+ /// <inheritdoc/>
102+ public Task < IEnumerable < FeedItem > > RetrieveFeedAsync ( XmlReader xmlReader , IFeedItemNormalizer normalizer , CancellationToken cancellationToken = default )
149103 {
150104 if ( xmlReader == null )
151105 {
@@ -172,11 +126,11 @@ public Task<IEnumerable<FeedItem>> RetrieveFeedAsync(XmlReader xmlReader, IFeedI
172126 return Task . FromResult ( Enumerable . Empty < FeedItem > ( ) ) ;
173127 }
174128
175- private static async Task < XmlReader > GetXmlReaderAsync ( string uri )
129+ private static async Task < XmlReader > GetXmlReaderAsync ( string uri , CancellationToken cancellationToken = default )
176130 {
177131 if ( Uri . IsWellFormedUriString ( uri , UriKind . Absolute ) )
178132 {
179- var response = await _httpclient . GetAsync ( uri ) ;
133+ var response = await _httpclient . GetAsync ( uri , cancellationToken ) ;
180134 response . EnsureSuccessStatusCode ( ) ;
181135 var stream = await response . Content . ReadAsStreamAsync ( ) ;
182136 return XmlReader . Create ( stream ) ;
0 commit comments