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(); }
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(); } }
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(); } }