Я собираюсь создать интерфейс, содержащий функцию, которая запускает длительную работу.Проектирование интерфейса с долговременной задачей
сейчас я не уверен, что я должен предложить это в самом интерфейсе или это зависит от вызывающего, чтобы решить, хочет ли он назвать его блокировкой или асинхронным.
public interface I {
int PerformTask(); // blocks long time
void PerformTaskAsync(); // returns immediately
event Action OnTaskFinished(int result); // triggers when task is finished
}
Должен ли я иметь оба пути в интерфейсе или решать до одного? если да, то какой?
Предоставление одного интерфейса, по-видимому, сводит к минимуму количество модульных тестов, которые вы должны написать. –
В текущем коде .NET используются задачи вместо шаблона EAP, который вы опубликовали. Если вы предоставляете интерфейс, подобный тому, который вы опубликовали, ваши клиенты будут вынуждены адаптировать его к задаче, чтобы объединить его с другим асинхронным кодом. Просто укажите один метод «Задача PerformTaskAsync()» и позвольте клиентам называть его «int result = await obj.PerformTaskAsync();' –