/// <summary> /// Init the JobRunner, changes on these settings require app restart: /// - ConcurrentJob /// </summary> public JobRunner() { jobScheduler = new LimitedConcurrencyLevelTaskScheduler(Properties.Settings.Default.ConcurrentJob, 8); _jobFactory = new TaskFactory(jobScheduler); }
public void TestDBMethod() { int MEMBER_COUNT = 10; int IMAGE_COUNT = 10; int TAG_COUNT = 10; object _lock = new object(); using (var ctx = new NijieContext()) { Assert.IsTrue(ctx.Images.Count() == 0); } LimitedConcurrencyLevelTaskScheduler scheduler = new LimitedConcurrencyLevelTaskScheduler(3, 3); TaskFactory jobFactory = new TaskFactory(scheduler); List<Task> tasks = new List<Task>(); for (int m = 0; m < MEMBER_COUNT; m++) { int tempM = m; var task = jobFactory.StartNew(() => { Debug.WriteLine(String.Format("Task {0} running...", tempM)); using (var ctx = new NijieContext()) { var mbr = ctx.Members.Create(); mbr.MemberId = tempM; mbr.UserName = "******"; for (int i = 0; i < IMAGE_COUNT; i++) { var img = ctx.Images.Create(); img.ImageId = i; img.Title = "Dummy Image"; img.WorkDate = DateTime.Now; img.SavedFilename = @"C:\haha.jpg"; img.Member = mbr; img.Tags = new List<NijieTag>(); for (int t = 0; t < TAG_COUNT; ++t) { img.Tags.Add(new NijieTag() { Name = "Tag-" + t }); } lock (_lock) { using (var dao = new NijieContext()) { img.SaveToDb(dao); } } } Debug.WriteLine(String.Format("Task {0} completed...", tempM)); } }); tasks.Add(task); } Task.WaitAll(tasks.ToArray()); using (var ctx = new NijieContext()) { var images = from x in ctx.Images.Include("Tags") select x; foreach (var item in images) { Debug.WriteLine(String.Format("Image {0}: {1} ==> {2}", item.ImageId, item.ViewUrl, item.SavedFilename)); Debug.WriteLine(String.Format("DateTime: {0}", item.WorkDate)); foreach (var tag in item.Tags) { Debug.WriteLine(String.Format("\t - {0}", tag.Name)); } Assert.IsTrue(item.WorkDate != DateTime.MinValue); } } }