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++; }