File tree Expand file tree Collapse file tree 2 files changed +31
-6
lines changed Expand file tree Collapse file tree 2 files changed +31
-6
lines changed Original file line number Diff line number Diff line change @@ -61,7 +61,9 @@ public void CannotAddObjectsToDisposerAfterSyncDispose()
6161 [ Fact ]
6262 public async Task DisposerDisposesOfObjectsAsyncIfIAsyncDisposableDeclared ( )
6363 {
64- var instance = new AsyncDisposeTracker ( ) ;
64+ var semaphore = new SemaphoreSlim ( 1 ) ;
65+ var instance = new AsyncDisposeTracker ( semaphore ) ;
66+ await semaphore . WaitAsync ( ) ;
6567
6668 var disposer = new Disposer ( ) ;
6769 disposer . AddInstanceForDisposal ( instance ) ;
@@ -74,6 +76,7 @@ public async Task DisposerDisposesOfObjectsAsyncIfIAsyncDisposableDeclared()
7476 Assert . False ( instance . IsAsyncDisposed ) ;
7577
7678 // Now we wait.
79+ semaphore . Release ( ) ;
7780 await result ;
7881
7982 Assert . False ( instance . IsSyncDisposed ) ;
Original file line number Diff line number Diff line change @@ -5,12 +5,24 @@ namespace Autofac.Test.Util;
55
66public sealed class AsyncDisposeTracker : IDisposable , IAsyncDisposable
77{
8+ private readonly SemaphoreSlim _semaphore ;
9+
810 public event EventHandler < EventArgs > Disposing ;
911
1012 public bool IsSyncDisposed { get ; set ; }
1113
1214 public bool IsAsyncDisposed { get ; set ; }
1315
16+ public AsyncDisposeTracker ( )
17+ : this ( null )
18+ {
19+ }
20+
21+ public AsyncDisposeTracker ( SemaphoreSlim semaphore )
22+ {
23+ _semaphore = semaphore ;
24+ }
25+
1426 public void Dispose ( )
1527 {
1628 IsSyncDisposed = true ;
@@ -20,10 +32,20 @@ public void Dispose()
2032
2133 public async ValueTask DisposeAsync ( )
2234 {
23- await Task . Delay ( 1 ) ;
24-
25- IsAsyncDisposed = true ;
26-
27- Disposing ? . Invoke ( this , EventArgs . Empty ) ;
35+ if ( _semaphore != null )
36+ {
37+ await _semaphore . WaitAsync ( ) ;
38+ }
39+
40+ try
41+ {
42+ IsAsyncDisposed = true ;
43+
44+ Disposing ? . Invoke ( this , EventArgs . Empty ) ;
45+ }
46+ finally
47+ {
48+ _semaphore ? . Release ( ) ;
49+ }
2850 }
2951}
You can’t perform that action at this time.
0 commit comments