Merge branch 'master' into msbuilddll2
[mono.git] / mcs / class / corlib / System.Threading.Tasks / TaskActionInvoker.cs
index 88746381daa1636bfb44282ca66f905eea85b330..72a486f7a806e066243703865ad460e7b17d9404 100644 (file)
@@ -26,7 +26,7 @@
 //
 //
 
-#if NET_4_0 || MOBILE
+#if NET_4_0
 
 using System.Threading;
 
@@ -35,6 +35,7 @@ namespace System.Threading.Tasks
        abstract class TaskActionInvoker
        {
                public static readonly TaskActionInvoker Empty = new EmptyTaskActionInvoker ();
+               public static readonly TaskActionInvoker Promise = new EmptyTaskActionInvoker ();
                public static readonly TaskActionInvoker Delay = new DelayTaskInvoker ();
                
                sealed class EmptyTaskActionInvoker : TaskActionInvoker
@@ -290,12 +291,10 @@ namespace System.Threading.Tasks
                sealed class FuncTaskSelected<TResult> : TaskActionInvoker
                {
                        readonly Func<Task, TResult> action;
-                       readonly Task[] tasks;
 
-                       public FuncTaskSelected (Func<Task, TResult> action, Task[] tasks)
+                       public FuncTaskSelected (Func<Task, TResult> action)
                        {
                                this.action = action;
-                               this.tasks = tasks;
                        }
 
                        public override Delegate Action {
@@ -306,8 +305,8 @@ namespace System.Threading.Tasks
 
                        public override void Invoke (Task owner, object state, Task context)
                        {
-                               var result = ((Task<int>) owner).Result;
-                               ((Task<TResult>) context).Result = action (tasks[result]);
+                               var result = ((Task<Task>) owner).Result;
+                               ((Task<TResult>) context).Result = action (result);
                        }
                }
 
@@ -492,9 +491,9 @@ namespace System.Threading.Tasks
                        return new ActionTaskSelected (action);
                }
 
-               public static TaskActionInvoker Create<TResult> (Func<Task, TResult> action, Task[] tasks)
+               public static TaskActionInvoker CreateSelected<TResult> (Func<Task, TResult> action)
                {
-                       return new FuncTaskSelected<TResult> (action, tasks);
+                       return new FuncTaskSelected<TResult> (action);
                }
 
                #endregion