Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 22 additions & 11 deletions AIDevGallery/Controls/SampleContainer.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ public List<string> NugetPackageReferences
private List<ModelDetails>? _modelsCache;
private WinMlSampleOptions? _currentWinMlSampleOptions;
private CancellationTokenSource? _sampleLoadingCts;
private readonly object _ctsLock = new object();
private TaskCompletionSource? _sampleLoadedCompletionSource;
private double _codePaneWidth;
private ModelType? _wcrApi;
Expand Down Expand Up @@ -109,16 +110,19 @@ internal static async Task WaitUnloadAllAsync()

private void CancelCTS()
{
var cts = _sampleLoadingCts;
if (cts == null)
CancellationTokenSource? cts;
lock (_ctsLock)
{
return;
cts = _sampleLoadingCts;
_sampleLoadingCts = null;
}

_sampleLoadingCts = null;
using (cts)
if (cts != null)
{
cts.Cancel();
using (cts)
{
cts.Cancel();
}
}
}

Expand Down Expand Up @@ -220,9 +224,13 @@ public async Task LoadSampleAsync(Sample? sample, List<ModelDetails>? models, Wi
return;
}

_sampleLoadingCts?.Dispose();
_sampleLoadingCts = new CancellationTokenSource();
var token = _sampleLoadingCts.Token;
CancellationToken token;
lock (_ctsLock)
{
_sampleLoadingCts?.Dispose();
_sampleLoadingCts = new CancellationTokenSource();
token = _sampleLoadingCts.Token;
}

// if WCR API, check if model is downloaded
foreach (var wcrApi in models.Where(m => m.HardwareAccelerators.Contains(HardwareAccelerator.WCRAPI)))
Expand Down Expand Up @@ -319,8 +327,11 @@ public async Task LoadSampleAsync(Sample? sample, List<ModelDetails>? models, Wi
finally
{
_sampleLoadedCompletionSource = null;
_sampleLoadingCts?.Dispose();
_sampleLoadingCts = null;
lock (_ctsLock)
{
_sampleLoadingCts?.Dispose();
_sampleLoadingCts = null;
}
}

NavigatedToSampleLoadedEvent.Log(sample.Name ?? string.Empty);
Expand Down