Я использую gRPC в C # и продолжаю комбинировать два CancellationToken
и передавать его на сервер gRPC: 1 - мой «глобальный» токен отмены (например, если пользователь нажал кнопку «отменить»), а второйОдин из них - справиться с моим таймаутом. Я видел, что у gRPC также есть опция deadline
, которую я могу предоставить каждому звонку. Мне интересно, могу ли я по-прежнему просто использовать CancellationToken
на сервере? Это будет отменено после истечения срока? Или я должен объединить его с переменной крайнего срока внутри каждого метода, вызываемого на сервере?
Это позволило бы мне сделать:
await client.MethodAsync( parametersHere,
cancellationToken: GlobalCancellationToken,
deadline: DateTime.Now.AddMinutes(2) );
Что писать и читать гораздо проще, чемобъединение двух CancellationToken
:
using var cancelIn5Minutes = new CancellationTokenSource(TimeSpan.FromMinutes(5));
using var cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(stoppingToken, cancelIn5Minutes.Token);
await client.MethodAsync( parametersHere,
cancellationToken: cancellationTokenSource);