22{
33 using System ;
44 using System . Data ;
5+ using System . Threading ;
6+ using System . Threading . Tasks ;
57
68 /// <summary>
7- /// IDataReader Base Class
9+ /// IMiniExcelDataReader Base Class
810 /// </summary>
9- public abstract class MiniExcelDataReaderBase : IDataReader
11+ public abstract class MiniExcelDataReaderBase : IMiniExcelDataReader
1012 {
1113 /// <summary>
1214 /// <inheritdoc/>
@@ -202,26 +204,124 @@ public abstract class MiniExcelDataReaderBase : IDataReader
202204 /// <returns></returns>
203205 public virtual bool NextResult ( ) => false ;
204206
207+ /// <summary>
208+ /// <inheritdoc/>
209+ /// </summary>
210+ /// <param name="cancellationToken"></param>
211+ /// <returns></returns>
212+ public virtual Task < bool > NextResultAsync ( CancellationToken cancellationToken = default )
213+ {
214+ if ( cancellationToken . IsCancellationRequested )
215+ {
216+ return MiniExcelTask . FromCanceled < bool > ( cancellationToken ) ;
217+ }
218+ else
219+ {
220+ try
221+ {
222+ return NextResult ( ) ? Task . FromResult ( true ) : Task . FromResult ( false ) ;
223+ }
224+ catch ( Exception e )
225+ {
226+ return MiniExcelTask . FromException < bool > ( e ) ;
227+ }
228+ }
229+ }
230+
205231 /// <summary>
206232 /// <inheritdoc/>
207233 /// </summary>
208234 /// <param name="i"></param>
209235 /// <returns></returns>
210236 public abstract string GetName ( int i ) ;
211237
238+ /// <summary>
239+ /// <inheritdoc/>
240+ /// </summary>
241+ /// <param name="i"></param>
242+ /// <param name="cancellationToken"></param>
243+ /// <returns></returns>
244+ public virtual Task < string > GetNameAsync ( int i , CancellationToken cancellationToken = default )
245+ {
246+ if ( cancellationToken . IsCancellationRequested )
247+ {
248+ return MiniExcelTask . FromCanceled < string > ( cancellationToken ) ;
249+ }
250+ else
251+ {
252+ try
253+ {
254+ return Task . FromResult ( GetName ( i ) ) ;
255+ }
256+ catch ( Exception e )
257+ {
258+ return MiniExcelTask . FromException < string > ( e ) ;
259+ }
260+ }
261+ }
262+
212263 /// <summary>
213264 /// <inheritdoc/>
214265 /// </summary>
215266 /// <param name="i"></param>
216267 /// <returns></returns>
217268 public abstract object GetValue ( int i ) ;
218269
270+ /// <summary>
271+ /// <inheritdoc/>
272+ /// </summary>
273+ /// <param name="i"></param>
274+ /// <param name="cancellationToken"></param>
275+ /// <returns></returns>
276+ public virtual Task < object > GetValueAsync ( int i , CancellationToken cancellationToken = default )
277+ {
278+ if ( cancellationToken . IsCancellationRequested )
279+ {
280+ return MiniExcelTask . FromCanceled < object > ( cancellationToken ) ;
281+ }
282+ else
283+ {
284+ try
285+ {
286+ return Task . FromResult ( GetValue ( i ) ) ;
287+ }
288+ catch ( Exception e )
289+ {
290+ return MiniExcelTask . FromException < object > ( e ) ;
291+ }
292+ }
293+ }
294+
219295 /// <summary>
220296 /// <inheritdoc/>
221297 /// </summary>
222298 /// <returns></returns>
223299 public abstract bool Read ( ) ;
224300
301+ /// <summary>
302+ /// <inheritdoc/>
303+ /// </summary>
304+ /// <param name="cancellationToken"></param>
305+ /// <returns></returns>
306+ public virtual Task < bool > ReadAsync ( CancellationToken cancellationToken = default )
307+ {
308+ if ( cancellationToken . IsCancellationRequested )
309+ {
310+ return MiniExcelTask . FromCanceled < bool > ( cancellationToken ) ;
311+ }
312+ else
313+ {
314+ try
315+ {
316+ return Read ( ) ? Task . FromResult ( true ) : Task . FromResult ( false ) ;
317+ }
318+ catch ( Exception e )
319+ {
320+ return MiniExcelTask . FromException < bool > ( e ) ;
321+ }
322+ }
323+ }
324+
225325 /// <summary>
226326 /// <inheritdoc/>
227327 /// </summary>
@@ -233,10 +333,18 @@ public virtual void Close()
233333 /// <summary>
234334 /// <inheritdoc/>
235335 /// </summary>
236- /// <param name="disposing" ></param >
237- protected virtual void Dispose ( bool disposing )
336+ /// <returns ></returns >
337+ public virtual Task CloseAsync ( )
238338 {
239-
339+ try
340+ {
341+ Close ( ) ;
342+ return MiniExcelTask . CompletedTask ;
343+ }
344+ catch ( Exception e )
345+ {
346+ return MiniExcelTask . FromException ( e ) ;
347+ }
240348 }
241349
242350 /// <summary>
@@ -247,5 +355,30 @@ public void Dispose()
247355 Dispose ( true ) ;
248356 GC . SuppressFinalize ( this ) ;
249357 }
358+
359+ #if NET8_0_OR_GREATER
360+ /// <summary>
361+ /// <inheritdoc/>
362+ /// </summary>
363+ /// <returns></returns>
364+ /// <exception cref="NotImplementedException"></exception>
365+ public virtual ValueTask DisposeAsync ( )
366+ {
367+ Dispose ( ) ;
368+ return default ;
369+ }
370+ #endif
371+
372+ /// <summary>
373+ /// <inheritdoc/>
374+ /// </summary>
375+ /// <param name="disposing"></param>
376+ protected virtual void Dispose ( bool disposing )
377+ {
378+ if ( disposing )
379+ {
380+ Close ( ) ;
381+ }
382+ }
250383 }
251384}
0 commit comments