Информация об изменениях

Сообщение CancellationTokenSource неудобный какой-то от 28.06.2022 9:45

Изменено 28.06.2022 10:19 Barbar1an

CancellationTokenSource неудобный какой-то
вот приходит мне общий токен отмены как параметн, а я хочу чтобы отменялось не тока по нему, но и по указанному таймауту

мне что вот стока хлама нада написать?


void Get(CancellationToken cancellation)
{
    using(var cts1 = new CancellationTokenSource(10 * 1000))
    {
        foreach(var h in Hubs)
        {
            var lcts1 = CancellationTokenSource.CreateLinkedTokenSource(cancellation, cts1.Token);
        
            var h = Connect(h, lcts1.Token);
        
            using(var cts2 = new CancellationTokenSource(10 * 1000))
            {
                var lcts2 = CancellationTokenSource.CreateLinkedTokenSource(cancellation, cts2.Token);
        
                var lp = h.LocatePackage(package, lcts2.Token);
            }
        }
    }
}


причем CancelAfter я не могу использовать потому что отмена по таймауту не долждна отменять всё, а только значить что я не мог подключиться к этому хабу и попробую другой
CancellationTokenSource неудобный какой-то
вот приходит мне общий токен отмены как параметн, а я хочу чтобы отменялось не тока по нему, но и по указанному таймауту

мне что вот стока хлама нада написать?


void Get(CancellationToken cancellation)
{
    using(var cts1 = new CancellationTokenSource(10 * 1000))
    {
        foreach(var h in Hubs)
        {
            var lcts1 = CancellationTokenSource.CreateLinkedTokenSource(cancellation, cts1.Token);
        
            var h = Connect(h, lcts1.Token);
        
            using(var cts2 = new CancellationTokenSource(10 * 1000))
            {
                var lcts2 = CancellationTokenSource.CreateLinkedTokenSource(cancellation, cts2.Token);
        
                var lp = h.LocatePackage(package, lcts2.Token);
            }
        }
    }
}


причем CancelAfter я не могу использовать потому что отмена по таймауту не долждна отменять всё, а только значить что я не мог подключиться к этому хабу и попробую другой

хотя... вроде можно так:
void Get(CancellationToken cancellation)
{
    using(var cts1 = new CancellationTokenSource(10 * 1000))
    {
        var lcts1 = CancellationTokenSource.CreateLinkedTokenSource(cancellation, cts1.Token);
        
        foreach(var h in Hubs)
        {
            lcts.CancelAfter(10 * 3000);
            var h = Connect(h, lcts1.Token);
        
        
            lcts.CancelAfter(10 * 3000);
            var lp = h.LocatePackage(package, lcts1.Token);
        }
    }
}