1 // Compiler options: -langversion:future
4 using System.Threading.Tasks;
5 using System.Threading;
6 using System.Collections.Generic;
11 static async Task<string> TestCompositionCall_1 ()
13 return await Task.Factory.StartNew (() => { Thread.Sleep (10); return "a"; }).ConfigureAwait (false) +
14 await Task.Factory.StartNew (() => "b").ConfigureAwait (false) + "c";
17 static async Task<string> TestCompositionCall_2 ()
19 return "a" + 1.ToString () +
20 await Task.Factory.StartNew (() => "b").ConfigureAwait (false) + "c";
23 static async Task<int> TestCompositionCall_3 ()
25 return await M (await Task.Factory.StartNew (() => (byte) 4).ConfigureAwait (false)).ConfigureAwait (false);
28 static async Task<int> TestCompositionPair_1 ()
30 return await Task.Factory.StartNew (() => 3).ConfigureAwait (false) + 6;
33 static async Task<int> TestCompositionPair_2 ()
35 return await Task.Factory.StartNew (() => { Thread.Sleep (10); return 3; }).ConfigureAwait (false) -
36 await Task.Factory.StartNew (() => 4).ConfigureAwait (false);
39 static async Task<int> TestCompositionPair_3 ()
42 await Task.Factory.StartNew (() => 4).ConfigureAwait (false);
45 static async Task<int> TestCompositionPair_4 ()
47 return await Task.Factory.StartNew (() => 3).ConfigureAwait (false) +
48 await Task.Factory.StartNew (() => 4).ConfigureAwait (false) +
49 await Task.Factory.StartNew (() => 7).ConfigureAwait (false);
52 static Task<byte> M (byte value)
54 return Task.Factory.StartNew (() => value);
57 public static int Main ()
59 var t1 = TestCompositionCall_1 ();
60 if (!Task.WaitAll (new[] { t1 }, 1000))
63 if (t1.Result != "abc")
66 var t2 = TestCompositionCall_2 ();
67 if (!Task.WaitAll (new[] { t2 }, 1000))
70 if (t2.Result != "a1bc")
73 var t3 = TestCompositionCall_3 ();
74 if (!Task.WaitAll (new[] { t3 }, 1000))
80 var t5 = TestCompositionPair_1 ();
81 if (!Task.WaitAll (new[] { t5 }, 1000))
87 var t6 = TestCompositionPair_2 ();
88 if (!Task.WaitAll (new[] { t6 }, 1000))
94 var t7 = TestCompositionPair_3 ();
95 if (!Task.WaitAll (new[] { t7 }, 1000))
101 var t8 = TestCompositionPair_4 ();
102 if (!Task.WaitAll (new[] { t8 }, 1000))
108 Console.WriteLine ("ok");