diff --git a/src/libraries/Microsoft.Extensions.Configuration.FileExtensions/tests/FileConfigurationProviderTest.cs b/src/libraries/Microsoft.Extensions.Configuration.FileExtensions/tests/FileConfigurationProviderTest.cs index 94518702b4c16a..ea3c0a841b8f66 100644 --- a/src/libraries/Microsoft.Extensions.Configuration.FileExtensions/tests/FileConfigurationProviderTest.cs +++ b/src/libraries/Microsoft.Extensions.Configuration.FileExtensions/tests/FileConfigurationProviderTest.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Configuration.Test; using Microsoft.Extensions.FileProviders; @@ -114,7 +113,8 @@ public void ProviderThrowsDirectoryNotFoundExceptionWhenNotFound(string physical Assert.Contains(physicalPath, exception.Message); } - [Fact] + // FileSystemWatcher is unreliable under load on .NET Framework, making this test flaky + [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsNotNetFramework))] public async Task ResolveFileProvider_WithMissingParentDirectory_WatchTokenFiresWhenFileCreated() { // Verify the fix for https://github.com/dotnet/runtime/issues/116713: @@ -150,10 +150,8 @@ public async Task ResolveFileProvider_WithMissingParentDirectory_WatchTokenFires Assert.NotNull(token); // The token should fire only when the target file is created, not when just the directory appears. - var tcs = new TaskCompletionSource(); - using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(15)); - cts.Token.Register(() => tcs.TrySetCanceled()); - token.RegisterChangeCallback(_ => tcs.TrySetResult(true), null); + var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + using var changeCallbackRegistration = token.RegisterChangeCallback(_ => tcs.TrySetResult(true), null); Directory.CreateDirectory(missingSubDir); await Task.Delay(500); @@ -161,7 +159,7 @@ public async Task ResolveFileProvider_WithMissingParentDirectory_WatchTokenFires File.WriteAllText(configFilePath, "{}"); - Assert.True(await tcs.Task, "Change token did not fire after the target file was created."); + await tcs.Task.WaitAsync(TimeSpan.FromSeconds(30)); } public class FileInfoImpl : IFileInfo diff --git a/src/libraries/Microsoft.Extensions.Configuration.FileExtensions/tests/Microsoft.Extensions.Configuration.FileExtensions.Tests.csproj b/src/libraries/Microsoft.Extensions.Configuration.FileExtensions/tests/Microsoft.Extensions.Configuration.FileExtensions.Tests.csproj index 8f4176cf64ebb1..9f46bffc967bc5 100644 --- a/src/libraries/Microsoft.Extensions.Configuration.FileExtensions/tests/Microsoft.Extensions.Configuration.FileExtensions.Tests.csproj +++ b/src/libraries/Microsoft.Extensions.Configuration.FileExtensions/tests/Microsoft.Extensions.Configuration.FileExtensions.Tests.csproj @@ -8,6 +8,8 @@ +