diff --git a/docfx/analyzers/configuration.md b/docfx/analyzers/configuration.md index d2c22a3b9..56eb6fcc5 100644 --- a/docfx/analyzers/configuration.md +++ b/docfx/analyzers/configuration.md @@ -93,8 +93,8 @@ thread. ## Methods to exclude from VSTHRD103 checks The VSTHRD103 analyzer flags calls to synchronous methods where asynchronous equivalents exist, -when in an async context. Sometimes certain APIs have async versions but those async versions -are significantly slower, less efficient, or simply not preferred. These methods can be +when in an async context. Sometimes certain APIs have async versions but those async versions +are significantly slower, less efficient, or simply not preferred. These methods can be excluded from VSTHRD103 analysis by specifying them in a configuration file. **Filename:** `vs-threading.SyncMethodsToExcludeFromVSTHRD103.txt`, or @@ -113,6 +113,7 @@ are intended for different operations or exceptional use cases: | --- | --- | | Entity Framework Core `DbContext` | `Add`, `AddRange` | | Entity Framework Core `DbSet` | `Add`, `AddRange` | +| Entity Framework Core `IDbContextFactory` | `CreateDbContext` | | NUnit `Assert` | `That` | | xUnit `Assert` | `Throws`, `ThrowsAny` | diff --git a/src/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes/buildTransitive/AdditionalFiles/vs-threading.SyncMethodsToExcludeFromVSTHRD103.frameworks.txt b/src/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes/buildTransitive/AdditionalFiles/vs-threading.SyncMethodsToExcludeFromVSTHRD103.frameworks.txt index 14b536b01..8ad1d5f3d 100644 --- a/src/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes/buildTransitive/AdditionalFiles/vs-threading.SyncMethodsToExcludeFromVSTHRD103.frameworks.txt +++ b/src/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes/buildTransitive/AdditionalFiles/vs-threading.SyncMethodsToExcludeFromVSTHRD103.frameworks.txt @@ -3,6 +3,7 @@ [Microsoft.EntityFrameworkCore.DbContext]::AddRange [Microsoft.EntityFrameworkCore.DbSet`1]::Add [Microsoft.EntityFrameworkCore.DbSet`1]::AddRange +[Microsoft.EntityFrameworkCore.IDbContextFactory`1]::CreateDbContext [NUnit.Framework.Assert]::That [Xunit.Assert]::Throws [Xunit.Assert]::ThrowsAny diff --git a/test/Microsoft.VisualStudio.Threading.Analyzers.Tests/VSTHRD103UseAsyncOptionAnalyzerTests.cs b/test/Microsoft.VisualStudio.Threading.Analyzers.Tests/VSTHRD103UseAsyncOptionAnalyzerTests.cs index 2fa3aa7f7..0ae5df2b2 100644 --- a/test/Microsoft.VisualStudio.Threading.Analyzers.Tests/VSTHRD103UseAsyncOptionAnalyzerTests.cs +++ b/test/Microsoft.VisualStudio.Threading.Analyzers.Tests/VSTHRD103UseAsyncOptionAnalyzerTests.cs @@ -2801,6 +2801,9 @@ async Task TestAsync() set.Add(new object()); set.AddRange(new object()); + Microsoft.EntityFrameworkCore.IDbContextFactory factory = new Microsoft.EntityFrameworkCore.DbContextFactory(); + factory.CreateDbContext(); + Unrelated.Assert.{|#0:Throws|}(() => { }); } } @@ -2842,6 +2845,18 @@ public void Add(T entity) { } public void AddRange(params T[] entities) { } public Task AddRangeAsync(params T[] entities) => Task.CompletedTask; } + + interface IDbContextFactory where TContext : DbContext + { + TContext CreateDbContext(); + Task CreateDbContextAsync(); + } + + class DbContextFactory : IDbContextFactory where TContext : DbContext, new() + { + public TContext CreateDbContext() => new TContext(); + public Task CreateDbContextAsync() => Task.FromResult(new TContext()); + } } namespace Unrelated