Я пишу интерфейс C #, который будет иметь несколько различных реализаций, некоторые из которых я не контролирую.Учитывая мою проблемную область, все (большинство) реализаций метода будут включать какую-то сетевую связь.По этой причине я пишу интерфейс так, чтобы все методы возвращали экземпляры Task и могли выполняться асинхронно.Пока все хорошо.
Теперь я рассматриваю возможность добавления параметра CancellationToken
в некоторые / все методы интерфейса.AFAIK следует добавить CancellationToken
к методу, когда
- метод может занять много времени, и
- есть моменты, когда реализация может проверить токен и предотвратить дальнейшее использованиересурсов, если операция была отменена.
Но мне не совсем ясно, каковы критерии, когда реализация метода неизвестна, например, при написании интерфейса.Например, некоторые из методов в моем интерфейсе включают в себя простые операции и , вероятно, будут достаточно быстрыми, чтобы в большинстве случаев не нуждаться в поддержке отмены, но я не могу знать наверняка, потому что я не контролируювсе реализации, и в любом случае они будут включать сетевое взаимодействие, так что в конечном итоге это будет зависеть от задержки в сети.
Каковы практические правила / лучшие практики, чтобы решить, добавлять или нет CancellationToken
к интерфейсуметод (реализация которого неизвестна)?