Esempio n. 1
0
        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();
            }
        }