// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-#if NET_4_5
-
using System;
using System.Threading;
using System.Threading.Tasks;
[TestFixture]
public class AsyncTaskMethodBuilderTest
{
+#if !MONOTOUCH
+ // For some reason MT excludes CallContext handling
+
[Test]
public void CallContextFlow ()
{
CallContext.LogicalSetData ("name0", "0");
- Task.WhenAll (Work ("A"), Work ("B")).Wait ();
+ Assert.IsTrue (Task.WhenAll (Work ("A"), Work ("B")).Wait (4000), "#0");
Assert.IsNull (CallContext.LogicalGetData ("A"), "#A");
Assert.IsNull (CallContext.LogicalGetData ("B"), "#B");
}
var found = CallContext.LogicalGetData ("name");
Assert.AreEqual (name, found, "#2" + name);
}
+#endif
}
}
-
-#endif
\ No newline at end of file
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-#if NET_4_0
-
using System;
using System.Reflection;
using System.Threading;
static int counter;
[Test]
- public void EnsureSingleThreadSafeExecution () {
+ public void EnsureSingleThreadSafeExecution ()
+ {
counter = 42;
var l = new Lazy<int> (delegate () { return counter ++; }, true);
-
+ bool failed = false;
object monitor = new object ();
- var threads = new Thread [10];
- for (int i = 0; i < 10; ++i) {
+ var threads = new Thread [4];
+ for (int i = 0; i < threads.Length; ++i) {
threads [i] = new Thread (delegate () {
lock (monitor) {
- Monitor.Wait (monitor);
+ if (!Monitor.Wait (monitor, 2000))
+ failed = true;
}
int val = l.Value;
});
}
- for (int i = 0; i < 10; ++i)
+ for (int i = 0; i < threads.Length; ++i)
threads [i].Start ();
lock (monitor)
Monitor.PulseAll (monitor);
-
+
+ for (int i = 0; i < threads.Length; ++i)
+ threads [i].Join ();
+
+ Assert.IsFalse (failed);
Assert.AreEqual (42, l.Value);
}
}
}
-
-#endif