Существуют ли какие-либо полезные идиомы, которые я могу использовать при написании асинхронного API? Я хотел бы стандартизировать что-то, поскольку я, кажется, использую несколько различных стилей повсюду. Кажется, трудно сделать простой асинхронный код; Я полагаю, это потому, что асинхронные операции - это не что иное, как *. 1001 *
На самом базовом уровне пользователь API должен иметь возможность:
- Получать данные, когда они становятся доступными
- Проверка состояния асинхронной операции
- Получать уведомления об ошибках, которые происходят
- Ожидание завершения (преобразование асинхронной операции в синхронную).
Мои классы поддерживают несколько асинхронных операций. Я поместил некоторые обратные вызовы состояния / ошибки в классе вокруг него, но класс становится переполненным множеством случайных полей, а также становится слишком большим. Мне любопытно, использовал ли кто-нибудь асинхронный API, который они нашли хорошо организованным. Я рассмотрел проект Begin / EndAsyncOperation + AsyncResult .NET, а также некоторые классы в Java (например, в будущем).
Это написано на Python, поэтому оно остается очень гибким. Существует предостережение: некоторые из этих асинхронных операций направляются на удаленную машину и выполняются там. Таким образом, не каждая операция обязательно выполняется в отдельном потоке.