Study/Development
[개발일지] Flutter Bloc 상태관리 #5 비동기 처리 방식: bloc_concurrency Package
titann
2023. 4. 12. 12:16

<인프런 개발하는 남자 온라인강의 수강일지>
bloc_concurrency
Ember_concurrency에서 영감을 얻어 만듦 비동기 프로그램을 간결하면서도 강력하게 만들어주는 라이브러리
Concurrent 방식
bloc의 기본 처리 방식, 연속 호출 시 이벤트간에 시간이 겹친다. 각각의 이벤트가 불필요하게 모두 실행됨.

Sequential 방식
1번이 완료된 이후에 2번이 실행된다. 순차적으로 실행되어 각각의 이벤트를 확인 가능하지만, 더 많은 이벤트 호출 시 의도와는 다르게 이벤트들이 하나하나 모두 끝날때까지 순차적으로 계속 실행되는 경우가 발생할 수 있다.

Droppable 방식
이벤트가 발생하여 완료되는 순간까지 다른 이벤트 호출이 무시된다.

Restartable 방식
가장 최종의 클릭만 수행. 악의적인 이벤트 호출을 무시하고, 서비스 부하를 가장 줄임.

*예제
on<Event> → transformer 옵션에 함수를 넣어 간단하게 사용
class SampleBloc extends Bloc<ShowEvent, SampleState> {
final SampleRepository _sampleRepository;
//concurrent : bloc의 기본 처리 방식 - transfomer에 따로 적지 않아도 됨
//sequential : 동기 방식 이벤트가 종료 되면 다음것 수행
//droppable : 이전 이벤트가 처리되는 동안 들어오는 이벤트 제거
//restartable : 최근 이벤트만 수행 이전 이벤트는 제거
SampleBloc(this._sampleRepository) : super(const SampleState.init()) {
// transformer 옵션에 간단하게 함수를 넣어 사용
on<IUShowEvent>(_showIu, transformer: restartable());
}
void _showIu(event, emit) async {
// Restartable 사용 시 동기는 계속해서 바로 실행
emit(state.copyWith(count: state.count + 1));
// Restartable 사용 시 비동기(await)는 최종 1번만 실행
var path = await _sampleRepository.getIU(state.count);
emit(state.copyWith(path: path));
}
@override
void onTransition(Transition<ShowEvent, SampleState> transition) {
super.onTransition(transition);
print(transition);
}
}
반응형