public async Task LoadOutSourceCrewsAsync(string uri, int count = -1, CancellationToken ct = default(CancellationToken)) { await semaphore.WaitAsync(); try { if (string.IsNullOrEmpty(uri)) { throw new ArgumentNullException("Uri is null!"); } var jsonData = string.Empty; using (var wClient = new WebClient()) { try { jsonData = await wClient.DownloadStringTaskAsync(uri); if (String.IsNullOrEmpty(jsonData)) { throw new ArgumentNullException("Failed to load string data!"); } } catch (Exception ex) { throw ex; } } IEnumerable <CrewExtendedDTO> crews = null; try { crews = await Task.Run(() => { return(JsonConvert.DeserializeObject <IEnumerable <CrewExtendedDTO> >(jsonData) ?? null); }, ct); } catch (Exception ex) { throw ex; } if (crews == null) { throw new ArgumentNullException("Failed to deserialize data!"); } if (count > 0) { crews = crews.Take(count); } var c = mapper.Map <IEnumerable <Crew> >(crews); try { await uow.Crews.InsertRangeAsync(mapper.Map <IEnumerable <Crew> >(c), ct); await uow.SaveChangesAsync(ct); await logService.WriteLogAsync(await logService.FormCrewsText(c, ct), ct); //await Task.WhenAll //( //, //, //); }catch (Exception ex) { throw ex; } } finally { semaphore.Release(); } }