public void ThreadSafeField_Modification_NeverThrows()
        {
            var o = new ThreadAffinedObject();

            TestHelpers.InvokeSimultaneouslyAndWait(() => o.ModifyThreadSafeField(200), () => o.ModifyThreadSafeField(200));
            TestHelpers.InvokeSimultaneouslyAndWait(() => ThreadAffinedObject.StaticMethodModifyingThreadSafeField(o), () => ThreadAffinedObject.StaticMethodModifyingThreadSafeField(o));
        }
 public void ModifyingIsntanceField_FromStaticUnsafeMethod_Throws()
 {
     var o = new ThreadAffinedObject();
     try
     {
         Task.Factory.StartNew(() => ThreadAffinedObject.StaticMethodModifyingInstanceField(o)).Wait();
     }
     catch (AggregateException aggrExc)
     {
         if (aggrExc.InnerExceptions.Count == 1) throw aggrExc.InnerExceptions[0];
         else throw;
     }
 }
 public void UnsafeMethod_CallFromBackgroundThread_Throws()
 {
     var o = new ThreadAffinedObject();
     try
     {
         Task.Factory.StartNew(() => o.ModifyField(0)).Wait();
     }
     catch (AggregateException aggrExc)
     {
         if (aggrExc.InnerExceptions.Count == 1) throw aggrExc.InnerExceptions[0];
         else throw;
     }
 }
        public void ModifyingIsntanceField_FromStaticUnsafeMethod_Throws()
        {
            var o = new ThreadAffinedObject();

            try
            {
                Task.Factory.StartNew(() => ThreadAffinedObject.StaticMethodModifyingInstanceField(o)).Wait();
            }
            catch (AggregateException aggrExc)
            {
                if (aggrExc.InnerExceptions.Count == 1)
                {
                    throw aggrExc.InnerExceptions[0];
                }
                else
                {
                    throw;
                }
            }
        }
        public void UnsafeMethod_CallFromBackgroundThread_Throws()
        {
            var o = new ThreadAffinedObject();

            try
            {
                Task.Factory.StartNew(() => o.ModifyField(0)).Wait();
            }
            catch (AggregateException aggrExc)
            {
                if (aggrExc.InnerExceptions.Count == 1)
                {
                    throw aggrExc.InnerExceptions[0];
                }
                else
                {
                    throw;
                }
            }
        }
 public static void StaticMethodModifyingInstanceField(ThreadAffinedObject instance)
 {
     instance.protectedField++;
 }
        public void ModifyingField_FromThreadSafeMethod_NeverThrows()
        {
            var o = new ThreadAffinedObject();

            TestHelpers.InvokeSimultaneouslyAndWait(() => o.ThreadSafeModifyField(200), () => o.ThreadSafeModifyField(200));
        }
 public static void StaticMethodModifyingThreadSafeField(ThreadAffinedObject instance)
 {
     instance.threadSafeField++;
 }
 public static void StaticMethodModifyingThreadSafeField(ThreadAffinedObject instance)
 {
     instance.threadSafeField++;
 }
 public static void StaticMethodModifyingInstanceField(ThreadAffinedObject instance)
 {
     instance.protectedField++;
 }
 public void ThreadSafeField_Modification_NeverThrows()
 {
     var o = new ThreadAffinedObject();
     TestHelpers.InvokeSimultaneouslyAndWait(() => o.ModifyThreadSafeField(200), () => o.ModifyThreadSafeField(200));
     TestHelpers.InvokeSimultaneouslyAndWait(() => ThreadAffinedObject.StaticMethodModifyingThreadSafeField(o), () => ThreadAffinedObject.StaticMethodModifyingThreadSafeField(o));
 }
 public void ModifyingField_FromThreadSafeMethod_NeverThrows()
 {
     var o = new ThreadAffinedObject();
     TestHelpers.InvokeSimultaneouslyAndWait(() => o.ThreadSafeModifyField(200), () => o.ThreadSafeModifyField(200));
 }