Example #1
0
        public void ExecutionsDoNotIntersect( )
        {
            ExecutionTokenSpool ets   = new ExecutionTokenSpool( );
            List <Task>         tasks = new List <Task>(5);
            List <FromToSpan>   spans = new List <FromToSpan>(5);

            for (int i = 0; i < 5; i++)
            {
                tasks.Add(
                    Task.Run(
                        async( ) => {
                    FromToSpan span = new FromToSpan( );
                    using (await ets.GetExecutionToken( )) {
                        span.From = DateTime.Now;
                        await Task.Delay(10);
                        span.To = DateTime.Now;
                    }

                    lock ( spans ) {
                        spans.Add(span);
                    }
                }));
            }

            Task.WaitAll(tasks.ToArray( ));

            Assert.AreEqual(5, spans.Count);
            Assert.False(spans.Any(s1 => spans.Any(s2 => s1 != s2 && s1.Intersects(s2))));
        }
Example #2
0
 public bool Intersects(FromToSpan other)
 {
     if (To > other.To &&
         From < other.From)
     {
         return(true);
     }
     if (To > other.From &&
         To < other.From)
     {
         return(true);
     }
     if (From < other.To &&
         From > other.From)
     {
         return(true);
     }
     return(false);
 }