/
aprogrammer
/
dotnet-docs
Обзор
Документация
Войти
/
aprogrammer
/
dotnet-docs
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
docs/core/extensions/snippets/primitives/change/Example.Composites.cs
56 строк
2 KB
David Pine
Extension upgrades (#32468)
10 ноя 2022, 05:14
Не верифицирован
10 ноя 2022, 05:14
a4c59af
Код
Авторство
О чём код?
using Microsoft.Extensions.Primitives; internal static partial class Example { internal static void Composite() { // <Composites> CancellationTokenSource firstCancellationTokenSource = new(); CancellationChangeToken firstCancellationChangeToken = new(firstCancellationTokenSource.Token); CancellationTokenSource secondCancellationTokenSource = new(); CancellationChangeToken secondCancellationChangeToken = new(secondCancellationTokenSource.Token); CancellationTokenSource thirdCancellationTokenSource = new(); CancellationChangeToken thirdCancellationChangeToken = new(thirdCancellationTokenSource.Token); var compositeChangeToken = new CompositeChangeToken( new IChangeToken[] { firstCancellationChangeToken, secondCancellationChangeToken, thirdCancellationChangeToken }); static void callback(object? state) => Console.WriteLine($"The {state} callback was invoked."); // 1st, 2nd, 3rd, and 4th. compositeChangeToken.RegisterChangeCallback(callback, "1st"); compositeChangeToken.RegisterChangeCallback(callback, "2nd"); compositeChangeToken.RegisterChangeCallback(callback, "3rd"); compositeChangeToken.RegisterChangeCallback(callback, "4th"); // It doesn't matter which cancellation source triggers the change. // If more than one trigger the change, each callback is only fired once. Random random = new(); int index = random.Next(3); CancellationTokenSource[] sources = new[] { firstCancellationTokenSource, secondCancellationTokenSource, thirdCancellationTokenSource }; sources[index].Cancel(); Console.WriteLine(); // Outputs: // The 4th callback was invoked. // The 3rd callback was invoked. // The 2nd callback was invoked. // The 1st callback was invoked. // </Composites> } }