Является ли возврат Задачи нарушением принципа CQS?

Итак, если я напишу асинхронную команду, это неизбежно нарушит принцип CQS?

3 ответа

Решение

На уровне рассмотрения того, что вы хотите знать (запрос) или сделать (команда), то Task<T> дает вам данные и, следовательно, является правильным для запроса и Task нет и, следовательно, является правильным для команды. ("return void" - это языковой способ для некоторых языков выразить "не возвращать данные").

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

Сравнимо, если бы метод.NET вызывался в метод COM, он вызывал бы код, который всегда возвращал значение, указывающее успех или неудачу. Это просто деталь реализации того, как обработка исключений происходит в этой конкретной технологии. Это важно или неуместно думать об этом в зависимости от уровня, на котором вы работаете. Task подробное описание реализации асинхронного программирования на основе задач Это важно или неуместно думать об этом в зависимости от уровня, на котором вы работаете.

Уровень, на котором вам нужно подумать "это команда или запрос", Task детали реализации о том, как вы получаете void,

При работе с асинхронным Task представляет собой пустоту и Task<T> представляет "результат". Так что нет, это не нарушает CQS, вам просто нужно подумать Task как void,

Из статьи вы ссылаетесь:

При преобразовании из синхронного в асинхронный код любой метод, возвращающий тип T, становится асинхронным методом, возвращающим Task<T>и любой метод, возвращающий void, становится асинхронным методом, возвращающим Task.

Поэтому возвращаюсь Task (не Task<T>) означает, что метод, возвращающий void,

Другие вопросы по тегам