CancellationToken
Service is cancelled when it is disposed, or when any of the attached cancel tokens signals close.
.AddCancellationToken(CancellationToken) adds a cancel token to service.
try
{
// Create token source
CancellationTokenSource cancellationTokenSource = new();
// Service collection
IServiceCollection serviceCollection = new ServiceCollection()
.AddHandlers<ServiceHandlers>()
.AddCancellationToken(cancellationTokenSource.Token);
// Create avalanche service
using var service = serviceCollection.BuildAvalancheServiceProvider();
// Cancel service
cancellationTokenSource.Cancel();
//
IRequestFor<Type> typeRequest = new TypeRequest("System.String");
//
Type type = service.GetRequired<IRequestFor<Type>, Type>(typeRequest);
}
catch (OperationCanceledException oce)
{
Console.WriteLine(oce.Message);
}
.AddCancellationTokenSource(CancellationTokenSource) adds the token of a specific cancel token source to service.
IServiceCollection serviceCollection = new ServiceCollection()
.AddHandlers<ServiceHandlers>()
.AddCancellationTokenSource(cancellationTokenSource);
CancellationTokenSource can be added as ServiceDescriptor to be constructed with service.
IServiceCollection serviceCollection = new ServiceCollection()
.AddSingleton<CancellationTokenSource>();
This source can be acquired from IServiceProvider.
// Get cancellation token source
CancellationTokenSource cancellationTokenSource = service.GetRequiredService<CancellationTokenSource>();
// Cancel service
cancellationTokenSource.Cancel();
And cancel will result queries to fail, though cached results will be returned.
try
{
// Service collection
IServiceCollection serviceCollection = new ServiceCollection()
.AddHandlers<ServiceHandlers>()
.AddSingleton<CancellationTokenSource>();
// Create avalanche DI service
using var service = serviceCollection.BuildAvalancheServiceProvider();
// Get cancellation token source
CancellationTokenSource cancellationTokenSource = service.GetRequiredService<CancellationTokenSource>();
// Cancel service
cancellationTokenSource.Cancel();
//
IRequestFor<Type> typeRequest = new TypeRequest("System.String");
//
Type type = service.GetRequired<IRequestFor<Type>, Type>(typeRequest);
}
catch (OperationCanceledException oce)
{
Console.WriteLine(oce.Message);
}
Full Example
Full example
using System;
using System.Threading;
using Avalanche.Service;
using Microsoft.Extensions.DependencyInjection;
class di_cancel
{
public static void Run()
{
{
// <01>
try
{
// Create token source
CancellationTokenSource cancellationTokenSource = new();
// Service collection
IServiceCollection serviceCollection = new ServiceCollection()
.AddHandlers<ServiceHandlers>()
.AddCancellationToken(cancellationTokenSource.Token);
// Create avalanche service
using var service = serviceCollection.BuildAvalancheServiceProvider();
// Cancel service
cancellationTokenSource.Cancel();
//
IRequestFor<Type> typeRequest = new TypeRequest("System.String");
//
Type type = service.GetRequired<IRequestFor<Type>, Type>(typeRequest);
}
catch (OperationCanceledException oce)
{
Console.WriteLine(oce.Message);
}
// </01>
}
{
try
{
// Create token source
CancellationTokenSource cancellationTokenSource = new();
// Service collection
// <02>
IServiceCollection serviceCollection = new ServiceCollection()
.AddHandlers<ServiceHandlers>()
.AddCancellationTokenSource(cancellationTokenSource);
// </02>
// Create avalanche service
using var service = serviceCollection.BuildAvalancheServiceProvider();
// Cancel service
cancellationTokenSource.Cancel();
//
IRequestFor<Type> typeRequest = new TypeRequest("System.String");
//
Type type = service.GetRequired<IRequestFor<Type>, Type>(typeRequest);
}
catch (OperationCanceledException oce)
{
Console.WriteLine(oce.Message);
}
}
{
// <03>
try
{
// Service collection
IServiceCollection serviceCollection = new ServiceCollection()
.AddAvalancheService()
.AddHandlers<ServiceHandlers>()
.AddSingleton<CancellationTokenSource>();
// Create microsoft DI service
using var msService = serviceCollection.BuildServiceProvider();
// Create avalanche service
var avService = msService.GetRequiredService<IService>();
// Get cancellation token source
CancellationTokenSource cancellationTokenSource = msService.GetRequiredService<CancellationTokenSource>();
//
IRequestFor<Type> typeRequest = new TypeRequest("System.String");
//
Type type2 = avService.GetRequired<IRequestFor<Type>, Type>(typeRequest);
// Cancel service
cancellationTokenSource.Cancel();
//
Type type = avService.GetRequired<IRequestFor<Type>, Type>(typeRequest);
}
catch (OperationCanceledException oce)
{
Console.WriteLine(oce.Message);
}
// </03>
}
{
try
{
// Service collection
// <04>
IServiceCollection serviceCollection = new ServiceCollection()
.AddSingleton<CancellationTokenSource>();
// </04>
serviceCollection.AddHandlers<ServiceHandlers>();
// Create avalanche DI service
using var service = serviceCollection.BuildAvalancheServiceProvider();
// Get cancellation token source
CancellationTokenSource cancellationTokenSource = service.GetRequiredService<CancellationTokenSource>();
// Cancel service
cancellationTokenSource.Cancel();
//
IRequestFor<Type> typeRequest = new TypeRequest("System.String");
//
Type type = service.GetRequired<IRequestFor<Type>, Type>(typeRequest);
}
catch (OperationCanceledException oce)
{
Console.WriteLine(oce.Message);
}
}
{
try
{
// Service collection
IServiceCollection serviceCollection = new ServiceCollection()
.AddHandlers<ServiceHandlers>()
.AddSingleton<CancellationTokenSource>();
// Create avalanche DI service
using var service = serviceCollection.BuildAvalancheServiceProvider();
// <05>
// Get cancellation token source
CancellationTokenSource cancellationTokenSource = service.GetRequiredService<CancellationTokenSource>();
// Cancel service
cancellationTokenSource.Cancel();
// </05>
//
IRequestFor<Type> typeRequest = new TypeRequest("System.String");
//
Type type = service.GetRequired<IRequestFor<Type>, Type>(typeRequest);
}
catch (OperationCanceledException oce)
{
Console.WriteLine(oce.Message);
}
}
{
// <06>
try
{
// Service collection
IServiceCollection serviceCollection = new ServiceCollection()
.AddHandlers<ServiceHandlers>()
.AddSingleton<CancellationTokenSource>();
// Create avalanche DI service
using var service = serviceCollection.BuildAvalancheServiceProvider();
// Get cancellation token source
CancellationTokenSource cancellationTokenSource = service.GetRequiredService<CancellationTokenSource>();
// Cancel service
cancellationTokenSource.Cancel();
//
IRequestFor<Type> typeRequest = new TypeRequest("System.String");
//
Type type = service.GetRequired<IRequestFor<Type>, Type>(typeRequest);
}
catch (OperationCanceledException oce)
{
Console.WriteLine(oce.Message);
}
// </06>
}
}
}