Example #1
0
        public void Can_ExecuteDataSetTask()
        {
            var dsTasks = new List <Task>();

            // 여러 테이블의 정보를 비동기적으로 거의 동시에 로드합니다.
            //
            foreach (var section in Sections2)
            {
                var query = NorthwindAdoRepository.QueryProvider.GetQuery(section, QueryKey);
                Assert.IsNotEmpty(query);

                var task = NorthwindAdoRepository
                           .ExecuteDataSetAsync(query)
                           .ContinueWith(antecedent => {
                    using (var dataset = antecedent.Result) {
                        Assert.IsNotNull(dataset);
                        Assert.AreEqual(1, dataset.Tables.Count);
                        Assert.IsFalse(dataset.Tables[0].HasErrors);

                        //if(IsDebugEnabled)
                        //    log.Debug("Table[{0}] has [{1}] rows", dataset.Tables[0].TableName, dataset.Tables[0].Rows.Count);
                    }
                },
                                         TaskContinuationOptions.ExecuteSynchronously);
                dsTasks.Add(task);
            }

            Task.WaitAll(dsTasks.ToArray());
            dsTasks.All(t => t.IsCompleted).Should().Be.True();
        }
Example #2
0
        public void Can_ChainTask_ExecuteDataSetTask()
        {
            var dsTasks = new List <Task <DataSet> >();

            // 테이블 정보를 로딩하는 작업 자체는 비동기로 이루어지지만, 테이블별로 순서대로 로드되도록 합니다.
            // Loading Task의 순차 실행이라 보시면 됩니다. (단 이런 작업이 설정된대로 자동으로 수행되므로, 최족 Task의 실행여부만 판단하면 됩니다.)
            //
            foreach (var section in Sections2)
            {
                var query = NorthwindAdoRepository.QueryProvider.GetQuery(section, QueryKey);
                Assert.IsNotEmpty(query);

                var prevTask = dsTasks.LastOrDefault();

                // ExecuteDataSet() 실행을 순서대로 수행하도록 한다.
                if (prevTask != null)
                {
                    var task =
                        prevTask
                        .ContinueWith(_ => NorthwindAdoRepository.ExecuteDataSetAsync(query),
                                      TaskContinuationOptions.ExecuteSynchronously)
                        .Unwrap();
                    dsTasks.Add(task);
                }
                else
                {
                    var task = NorthwindAdoRepository.ExecuteDataSetAsync(query);
                    dsTasks.Add(task);
                }
            }

            foreach (var task in dsTasks)
            {
                var dataset = task.Result;

                dataset.Tables.Count.Should().Be(1);
                dataset.Tables[0].HasErrors.Should().Be.False();

                if (IsDebugEnabled)
                {
                    log.Debug("Table[{0}] has [{1}] rows", dataset.Tables[0].TableName, dataset.Tables[0].Rows.Count);
                }

                dataset.Dispose();
            }
        }
Example #3
0
        public void LoadDataSetByTasks()
        {
            //var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 8 };

            foreach (var section in Sections2)
            {
                string queryKey = section + ", " + QueryName;

                // 쿼리 조회 작업
                var ds = NorthwindAdoRepository.ExecuteDataSetAsync(queryKey).Result;

                Assert.AreEqual(1, ds.Tables.Count);
                Assert.IsFalse(ds.Tables[0].HasErrors);

                if (IsDebugEnabled)
                {
                    log.Debug("[{0}] Table을 로드하는데 성공했습니다.", ds.Tables[0].TableName);
                }

                ds.Dispose();
            }
        }