0
postcodes
을 기반으로 Geolocation
정보를 얻으려면 postcodes.io
api를 사용하고 있습니다. 괜찮 았어. 그러나이 API에는 요청 당 100
개의 엽서 만 허용 할 수 있다는 제한이 있습니다. 약 300 개의 우편 번호가 있습니다. API를 병렬로 호출하고 모든 것을 가져온 후에 응답을 집계 할 생각입니다.병렬 프로그래밍을 사용하여 외부 API에서 Geolocation 정보 얻기
var httpClient = _httpClientFactory.GetHttpClient("GeolocationAPI", postCodeServiceUrl, _httpLogger);
// chunks the list by 100 items and returns the collection
var postcodeChunks = postcodes.ChunkBy(100);
postcodeChunks.ForEach(
postcodeList =>
{
var response = httpClient
.Post
<MultipleGeolocationInfoRequest,
GetGeolocationResult<GetGeolocationResult<GeolocationInfo>[]>>(
"postcodes",
new MultipleGeolocationInfoRequest {Postcodes = postcodeList.ToArray()});
}
);
ChunkBy
확장 메소드리스트의 목록을 반환하고, 각리스트는 우편 번호 (100)를 포함.
반송 응답을 집계하고 예외가있는 경우 처리하는 데 어려움이 있습니다. 각 통화의 response
도 컬렉션입니다.
API : http://postcodes.io/
완전히 IO 바인딩 작업이므로 별도의 스레드에서 실행하는 대신 비동기 메서드를 사용하는 것이 좋습니다. IO 부분은 본질적으로 추가 스레드를 차단하지 않고 병렬로 실행됩니다. – juharr
감사합니다. 그것을 설명하는 링크를 공유 할 수 있습니까? 나는 이것에 아주 새롭다. – Venky
@juharr OP는 요청을 병렬로 실행하지 않습니다. 병렬로 실행하는 것이 좋습니다 ('Parallel.ForEach' 또는'Task.WhenAll'). –