using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
public static async Task Main()
var services = new ServiceCollection()
.AddScoped<SignalRClient>();
var provider = services.BuildServiceProvider();
Console.WriteLine("With CreateScope and Dispose:");
await ManuallyCreateScope(provider);
Console.WriteLine("Success!");
Console.WriteLine("----------");
Console.WriteLine("With CreateAsyncScope and DisposeAsync:");
await ManuallyCreateAsyncScope(provider);
Console.WriteLine("Success!");
static async Task ManuallyCreateScope(IServiceProvider serviceProvider)
using var scope = serviceProvider.CreateScope();
var client = scope.ServiceProvider.GetRequiredService<SignalRClient>();
await client.DoSomething();
static async Task ManuallyCreateAsyncScope(IServiceProvider serviceProvider)
await using var scope = serviceProvider.CreateAsyncScope();
var client = scope.ServiceProvider.GetRequiredService<SignalRClient>();
await client.DoSomething();
class SignalRClient : IAsyncDisposable
public Task DoSomething() => Task.CompletedTask;
public ValueTask DisposeAsync() => ValueTask.CompletedTask;