Когда я должен добавить CancellationToken в метод асинхронного интерфейса? - PullRequest
5 голосов
/ 12 июня 2019

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

Теперь я рассматриваю возможность добавления параметра CancellationToken в некоторые / все методы интерфейса.AFAIK следует добавить CancellationToken к методу, когда

  • метод может занять много времени, и
  • есть моменты, когда реализация может проверить токен и предотвратить дальнейшее использованиересурсов, если операция была отменена.

Но мне не совсем ясно, каковы критерии, когда реализация метода неизвестна, например, при написании интерфейса.Например, некоторые из методов в моем интерфейсе включают в себя простые операции и , вероятно, будут достаточно быстрыми, чтобы в большинстве случаев не нуждаться в поддержке отмены, но я не могу знать наверняка, потому что я не контролируювсе реализации, и в любом случае они будут включать сетевое взаимодействие, так что в конечном итоге это будет зависеть от задержки в сети.

Каковы практические правила / лучшие практики, чтобы решить, добавлять или нет CancellationToken к интерфейсуметод (реализация которого неизвестна)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...