한도 있는 동시 fetch
한도, 순서 유지, 실패는 모두 보관. Future.wait가 원시 연산자를 갖지 않는 일입니다.
강의
아는 id 리스트를 fetch하는 것은 이벤트 스트림이 아닙니다. 데이터는
손에 있고, 일은 I/O이며, 정책은 "동시에 최대 n개, 결과는
원래 순서"입니다. 그것이
mapConcurrent입니다
(또는
.toAsync().map(f).concurrent(n),
같은 체인을 세 단계로 쓴 것).
Future.wait(ids.map(fetch))는 전부를 한 번에 쏩니다.
n개씩 묶으면 각 묶음의 가장 느린 것을 기다립니다. 손으로
제대로 하면 워커 풀입니다 — 공유 커서, 미리 잡은 슬롯, 워커
Future. FxDart가 그 풀에 붙인 단어가
concurrent(n)입니다.
불안정한 호출은
요소마다
mapRetry로
재시도합니다. 터미널 전체를 감싸지 않습니다. 첫 번째만이 아니라 모든 문제를
보고해야 하는 검증은
mapOrAccumulate에
concurrency: n을 준 것입니다.
각 요소는 제 스코프에서 돌아가서, 하나의 실패가 형제로 새지 않고,
실패는 입력 순서로 나옵니다.
워커 풀 일의 Dart 비교는 명료함에서 fxdart입니다. 네이티브 풀은 두 번 쓰고 나면 짧아 보이지 않습니다. 이 페이지는 그 일에, 비교 예제가 보여 주지 않는 타입 있는 에러 절반을 더한 것입니다.
데모 1 · 동시에 둘, 순서는 유지
fetch 여섯, 겹치는 것은 절대 둘을 넘지 않습니다. 가짜 호출이 진행 중인 요청을 세어서 한도가 출력에 보이게 합니다.
데모 2 · 실패는 모두 보관, 한도는 그대로
짝수 id는 실패합니다. mapOrAccumulate는 여전히 한 번에
셋, 여전히 순서대로, Left는 모든 짝수 id를
담습니다 — fail-fast가 아니라 fail-slow.
concurrent ·
mapConcurrent ·
retry / mapRetry ·
mapOrAccumulate ·
디바운스 검색 — 시간 일 ·
Dart vs FxDart: 한 번에 둘