2 using System.Threading.Tasks;
3 using System.Threading;
4 using System.Collections.Generic;
9 static async Task<string> TestCompositionCall_1 ()
11 return await Task.Factory.StartNew (() => { Thread.Sleep (10); return "a"; }).ConfigureAwait (false) +
12 await Task.Factory.StartNew (() => "b").ConfigureAwait (false) + "c";
15 static async Task<string> TestCompositionCall_2 ()
17 return "a" + 1.ToString () +
18 await Task.Factory.StartNew (() => "b").ConfigureAwait (false) + "c";
21 static async Task<int> TestCompositionCall_3 ()
23 return await M (await Task.Factory.StartNew (() => (byte) 4).ConfigureAwait (false)).ConfigureAwait (false);
26 static async Task<int> TestCompositionPair_1 ()
28 return await Task.Factory.StartNew (() => 3).ConfigureAwait (false) + 6;
31 static async Task<int> TestCompositionPair_2 ()
33 return await Task.Factory.StartNew (() => { Thread.Sleep (10); return 3; }).ConfigureAwait (false) -
34 await Task.Factory.StartNew (() => 4).ConfigureAwait (false);
37 static async Task<int> TestCompositionPair_3 ()
40 await Task.Factory.StartNew (() => 4).ConfigureAwait (false);
43 static async Task<int> TestCompositionPair_4 ()
45 return await Task.Factory.StartNew (() => 3).ConfigureAwait (false) +
46 await Task.Factory.StartNew (() => 4).ConfigureAwait (false) +
47 await Task.Factory.StartNew (() => 7).ConfigureAwait (false);
50 static Task<byte> M (byte value)
52 return Task.Factory.StartNew (() => value);
55 public static int Main ()
57 var t1 = TestCompositionCall_1 ();
58 if (!Task.WaitAll (new[] { t1 }, 1000))
61 if (t1.Result != "abc")
64 var t2 = TestCompositionCall_2 ();
65 if (!Task.WaitAll (new[] { t2 }, 1000))
68 if (t2.Result != "a1bc")
71 var t3 = TestCompositionCall_3 ();
72 if (!Task.WaitAll (new[] { t3 }, 1000))
78 var t5 = TestCompositionPair_1 ();
79 if (!Task.WaitAll (new[] { t5 }, 1000))
85 var t6 = TestCompositionPair_2 ();
86 if (!Task.WaitAll (new[] { t6 }, 1000))
92 var t7 = TestCompositionPair_3 ();
93 if (!Task.WaitAll (new[] { t7 }, 1000))
99 var t8 = TestCompositionPair_4 ();
100 if (!Task.WaitAll (new[] { t8 }, 1000))
106 Console.WriteLine ("ok");