Esempio n. 1
0
        private async void Reload()
        {
            Diag.ThreadPrint("Reload start");
            await LoadBalanceDates();

            Diag.ThreadPrint("Reload end");
        }
Esempio n. 2
0
        private async Task LoadBalanceDates_old2()
        {
            var ts = TaskScheduler.FromCurrentSynchronizationContext();

            Diag.ThreadPrint("Load start");
            base.IsBusy = true;

            var tf = new TaskFactory(ts);

            var target = new ActionBlock <BalanceDate>(async a =>
            {
                await tf.StartNew(() =>
                {
                    balanceDates.GetOrAdd(a.BalanceDateId, a);
                    base.DataList.Add(new BalanceDateItemViewModel(a));
                    //Diag.ThreadPrint("In target. Account={0}", a.Name);
                });
            }, new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = 1
            });

            balanceDates.Clear();
            base.DataList.Clear();

            Diag.ThreadPrint("Load - before repo");
            await this.balanceDateRepository.PostList(target);

            await target.Completion;

            Diag.ThreadPrint("Load - after repo. qty={0}", balanceDates.Count);

            base.IsBusy = false;
            Diag.ThreadPrint("Load end");
        }
Esempio n. 3
0
        public async void Open()
        {
            Diag.ThreadPrint("Open start");
            await LoadBalanceDates();

            Diag.ThreadPrint("Open end");
        }
Esempio n. 4
0
        private async Task LoadBalanceDates()
        {
            Diag.ThreadPrint("Load start");
            base.IsBusy = true;

            var target = new ActionBlock <BalanceDate>(a =>
            {
                balanceDates.GetOrAdd(a.BalanceDateId, a);
                base.DataList.Add(new BalanceDateItemViewModel(a));
                //Diag.ThreadPrint("In target. Account={0}", a.Name);
            }, new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = 1
            });

            balanceDates.Clear();
            base.DataList.Clear();
            Diag.ThreadPrint("Load - before repo");
            await this.balanceDateRepository.PostList(target).ConfigureAwait(false);

            Diag.ThreadPrint("Load - after repo. qty={0}", balanceDates.Count);
            await target.Completion.ConfigureAwait(false);

            Diag.ThreadPrint("Load - after target completion. qty={0}", balanceDates.Count);

            base.IsBusy = false;
            Diag.ThreadPrint("Load end");
        }
Esempio n. 5
0
        public async void Open()
        {
            Diag.ThreadPrint("Open start");
            await LoadBankAccounts();

            Diag.ThreadPrint("Open end");
        }
Esempio n. 6
0
        private async Task LoadBankAccounts_ok()
        {
            Diag.ThreadPrint("Load start");
            base.IsBusy = true;

            var target = new ActionBlock <BankAccount>(a =>
            {
                bankAccounts.GetOrAdd(a.BankAccountId, a);
                Diag.ThreadPrint("In target. Account={0}", a.Name);
            }, new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = 4
            });

            bankAccounts.Clear();
            Diag.ThreadPrint("Load - before repo");
            await this.bankAccountRepository.PostList(target);

            Diag.ThreadPrint("Load - after repo. qty={0}", bankAccounts.Count);

            base.DataList.Clear();
            Diag.ThreadPrint("Load - after clear");
            if (bankAccounts != null)
            {
                Diag.ThreadPrint("Load - before populate");
                bankAccounts.Values.ToList().ForEach(a =>
                {
                    base.DataList.Add(new BankAccountItemViewModel(a));
                });
                Diag.ThreadPrint("Load - after populate");
            }

            base.IsBusy = false;
            Diag.ThreadPrint("Load end");
        }
Esempio n. 7
0
        private async void Reload()
        {
            Diag.ThreadPrint("Reload start");
            await LoadBankAccounts();

            Diag.ThreadPrint("Reload end");
        }
        public async Task PostList(ITargetBlock <Core.Entities.BalanceDate> target)
        {
            Diag.ThreadPrint("PostList - start");

            var transform = new TransformBlock <BalanceDate, Core.Entities.BalanceDate>(ef =>
                                                                                        mapper.Map <Core.Entities.BalanceDate>(ef), new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = 4
            });

            transform.LinkTo(target, new DataflowLinkOptions()
            {
                PropagateCompletion = true
            });

            await Task.Run(() =>
            {
                Diag.ThreadPrint("PostList - task start");

                using (FinanceEntities context = factory.CreateContext())
                {
                    (from b in context.BalanceDates
                     .Include(a => a.BalanceDateBankAccounts)
                     .Include("BalanceDateBankAccounts.BankAccount")
                     .Include("BalanceDateBankAccounts.BankAccount.Bank")
                     select b).AsParallel().ForAll(ef => transform.Post(ef));
                    //await transform.Completion;
                    //transform.Completion.ContinueWith(t =>
                    //{
                    //    if (t.IsFaulted) target.Fault(t.Exception);
                    //    else
                    //    {
                    //        Diag.ThreadPrint("PostList - task set target complete");
                    //        target.Complete();
                    //    }
                    //});
                    transform.Complete();
                }
                Diag.ThreadPrint("PostList - task end");
            }).ConfigureAwait(false);

            Diag.ThreadPrint("PostList - end");
        }