File tree Expand file tree Collapse file tree 2 files changed +25
-11
lines changed
Expand file tree Collapse file tree 2 files changed +25
-11
lines changed Original file line number Diff line number Diff line change @@ -14,7 +14,7 @@ public interface ICameraProvider
1414 /// List is initialized using <see cref="InitializeAsync"/>, and can be refreshed using <see cref="RefreshAvailableCameras(CancellationToken)"/>
1515 /// </remarks>
1616 IReadOnlyList < CameraInfo > ? AvailableCameras { get ; }
17-
17+
1818 /// <summary>
1919 /// Gets a value indicating whether the camera provider has been successfully initialized.
2020 /// </summary>
Original file line number Diff line number Diff line change @@ -25,28 +25,42 @@ public void Dispose()
2525 GC . SuppressFinalize ( this ) ;
2626 }
2727
28+ Task GetRefreshTask ( CancellationToken token )
29+ {
30+ if ( refreshAvailableCamerasTask is null || refreshAvailableCamerasTask . IsCompleted )
31+ {
32+ refreshAvailableCamerasTask = PlatformRefreshAvailableCameras ( token ) . AsTask ( ) ;
33+ }
34+
35+ return refreshAvailableCamerasTask ;
36+ }
37+
2838 /// <inheritdoc/>
2939 public async ValueTask InitializeAsync ( CancellationToken token )
3040 {
31- if ( ! IsInitialized )
41+ await refreshAvailableCamerasSemaphore . WaitAsync ( token ) ;
42+
43+ try
44+ {
45+ if ( ! IsInitialized )
46+ {
47+ await GetRefreshTask ( token ) ;
48+ }
49+ }
50+ finally
3251 {
33- await RefreshAvailableCameras ( token ) ;
52+ refreshAvailableCamerasSemaphore . Release ( ) ;
3453 }
3554 }
3655
3756 /// <inheritdoc/>
3857 public async Task RefreshAvailableCameras ( CancellationToken token )
3958 {
4059 await refreshAvailableCamerasSemaphore . WaitAsync ( token ) ;
41-
60+
4261 try
4362 {
44- if ( refreshAvailableCamerasTask is null || refreshAvailableCamerasTask . IsCompleted )
45- {
46- refreshAvailableCamerasTask = PlatformRefreshAvailableCameras ( token ) . AsTask ( ) ;
47- }
48-
49- await refreshAvailableCamerasTask ;
63+ await GetRefreshTask ( token ) ;
5064 }
5165 finally
5266 {
@@ -64,6 +78,6 @@ void Dispose(bool disposing)
6478 refreshAvailableCamerasTask = null ;
6579 }
6680 }
67-
81+
6882 private partial ValueTask PlatformRefreshAvailableCameras ( CancellationToken token ) ;
6983}
You can’t perform that action at this time.
0 commit comments