OpenBSD has sem_timedwait().
[mono.git] / mcs / tests / test-async-02.cs
index bb5cc845a736c24ada3b7df678c3b15bda2bc2ba..7c9c34c2d6da535cf887f257bc4077bf33c58d3e 100644 (file)
@@ -10,26 +10,32 @@ class C
 
        public async Task TestTask ()
        {
-               await Call ();
+               await Call ().ConfigureAwait (false);
+       }
+
+       public async Task TestTask2 ()
+       {
+               await Call ().ConfigureAwait (false);
+               return;
        }
 
        Task Call ()
        {
                return Task.Factory.StartNew (() => {
-                       mre.WaitOne ();
+                       mre.WaitOne (3000);
                        Console.WriteLine ("a");
                });
        }
 
        public async Task<int> TestTaskGeneric ()
        {
-               return await CallGeneric ();
+               return await CallGeneric ().ConfigureAwait (false);
        }
 
        Task<int> CallGeneric ()
        {
                return Task.Factory.StartNew (() => {
-                       mre.WaitOne ();
+                       mre.WaitOne (3000);
                        return 5;
                });
        }
@@ -42,24 +48,38 @@ class C
                        return 1;
 
                c.mre.Set ();
-               Task.WaitAll (t);
+               if (!Task.WaitAll (new[] { t }, 3000))
+                       return 2;
 
                if (t.Status != TaskStatus.RanToCompletion)
-                       return 2;
+                       return 3;
+
+               c = new C ();
+               t = c.TestTask2 ();
+               if (t.Status != TaskStatus.WaitingForActivation)
+                       return 4;
+
+               c.mre.Set ();
+               if (!Task.WaitAll (new[] { t }, 3000))
+                       return 5;
+
+               if (t.Status != TaskStatus.RanToCompletion)
+                       return 6;
 
                c = new C ();
                var t2 = c.TestTaskGeneric ();
                if (t2.Status != TaskStatus.WaitingForActivation)
-                       return 3;
+                       return 7;
 
                c.mre.Set ();
-               Task.WaitAll (t2);
+               if (!Task.WaitAll (new[] { t2 }, 3000))
+                       return 8;
 
                if (t2.Result != 5)
-                       return 4;
+                       return 9;
 
-               if (t.Status != TaskStatus.RanToCompletion)
-                       return 5;
+               if (t2.Status != TaskStatus.RanToCompletion)
+                       return 10;
 
                return 0;
        }