示例#1
0
        public static void QueueTask___lateredirect(global::System.Object o, Original::Task task)
        {
            var self = (Original::TaskScheduler)o;

            Helper.SimpleWrap <bool>(
                delegate(ClrSyncManager manager)
            {
                //global::System.Console.WriteLine("Intercepting ThreadPoolTaskScheduler.QueueTask");
                Helper.TaskArg p = new Helper.TaskArg();
                p.s             = new global::System.Threading.Semaphore(0, 1);
                p.e             = new global::System.Threading.ManualResetEvent(false);
                p.task          = task;
                p.taskScheduler = self;
                Original.Task.Factory.StartNew(
                    Helper.TaskCreateWrapper(manager),
                    p,
                    global::System.Threading.CancellationToken.None,
                    Original.TaskCreationOptions.None,
                    self);
                p.e.WaitOne();
                ChessTask child = manager.TaskFork();
                manager.RegisterTaskSemaphore(child, p.s, false);
                manager.TaskResume(child);
                return(true);
            },
                delegate()
            {
                var queueTask = self.GetType().GetMethod("QueueTask",
                                                         global::System.Reflection.BindingFlags.NonPublic |
                                                         global::System.Reflection.BindingFlags.Instance);
                queueTask.Invoke(self, new object[] { task });
                return(true);
            }
                );
        }
示例#2
0
 public static bool TryDequeue___lateredirect(global::System.Object o, Original::Task task)
 {
     using (_ProtectingThreadContext.Acquire())
     {
         //global::System.Console.WriteLine("Intercepting ThreadPoolTaskScheduler.TryDequeue");
         Original::TaskScheduler self = (Original::TaskScheduler)o;
         var tryDequeue = self.GetType().GetMethod("TryDequeue",
                                                   global::System.Reflection.BindingFlags.NonPublic |
                                                   global::System.Reflection.BindingFlags.Instance);
         return((bool)tryDequeue.Invoke(self, new object[] { task }));
     }
 }
示例#3
0
 public static bool Wait(Original::Task self, int millisecondsTimeout, CancellationToken cancellationToken)
 {
     return(WaitRaw(self, millisecondsTimeout, cancellationToken));
 }
示例#4
0
 public static bool Wait(Original::Task self, TimeSpan timeout)
 {
     return(WaitRaw(self, (int)timeout.TotalMilliseconds, CancellationToken.None));
 }
示例#5
0
 public static void Wait(Original::Task self, CancellationToken cancellationToken)
 {
     WaitRaw(self, Timeout.Infinite, cancellationToken);
 }
示例#6
0
        /*
         * // constructors
         * public static Original::Task ___ctor_newobj(Action action) { throw new NotImplementedException("Task"); }
         * public static Original::Task ___ctor_newobj(Action<object> action, object state) { throw new NotImplementedException("Task"); }
         * public static Original::Task ___ctor_newobj(Action action, CancellationToken cancellationToken) { throw new NotImplementedException("Task"); }
         * public static Original::Task ___ctor_newobj(Action action, TaskCreationOptions creationOptions) { throw new NotImplementedException("Task"); }
         * public static Original::Task ___ctor_newobj(Action<object> action, object state, CancellationToken cancellationToken) { throw new NotImplementedException("Task"); }
         * public static Original::Task ___ctor_newobj(Action<object> action, object state, TaskCreationOptions creationOptions) { throw new NotImplementedException("Task"); }
         * public static Original::Task ___ctor_newobj(Action action, CancellationToken cancellationToken, TaskCreationOptions creationOptions) { throw new NotImplementedException("Task"); }
         * public static Original::Task ___ctor_newobj(Action<object> action, object state, CancellationToken cancellationToken, TaskCreationOptions creationOptions) { throw new NotImplementedException("Task"); }
         *
         * public static object AsyncState { get; }
         * public static TaskCreationOptions CreationOptions { get; }
         * public static static int? CurrentId { get; }
         * public static AggregateException Exception { get; }
         * public static static TaskFactory Factory { get; }
         * public static int Id { get; }
         * public static bool IsCanceled { get; }
         * public static bool IsCompleted { get; }
         * public static bool IsFaulted { get; }
         * public static TaskStatus Status { get; }
         *
         * public static Original::Task ContinueWith(
         *  Original::Task self, Action<Original::Task> continuationAction) { throw new NotImplementedException("Task"); }
         * public static Original::Task<TResult> ContinueWith<TResult>(
         *  Original::Task self, Func<Original::Task, TResult> continuationFunction) { throw new NotImplementedException("Task"); }
         * public static Original::Task ContinueWith(
         *  Original::Task self, Action<Original::Task> continuationAction, CancellationToken cancellationToken) { throw new NotImplementedException("Task"); }
         * public static Original::Task ContinueWith(
         *  Original::Task self, Action<Original::Task> continuationAction, TaskContinuationOptions continuationOptions) { throw new NotImplementedException("Task"); }
         * public static Original::Task ContinueWith(
         *  Original::Task self, Action<Original::Task> continuationAction, TaskScheduler scheduler) { throw new NotImplementedException("Task"); }
         * public static Original::Task<TResult> ContinueWith<TResult>(
         *  Original::Task self, Func<Original::Task, TResult> continuationFunction, CancellationToken cancellationToken) { throw new NotImplementedException("Task"); }
         * public static Original::Task<TResult> ContinueWith<TResult>(
         *  Original::Task self, Func<Original::Task, TResult> continuationFunction, TaskContinuationOptions continuationOptions) { throw new NotImplementedException("Task"); }
         * public static Original::Task<TResult> ContinueWith<TResult>(
         *  Original::Task self, Func<Original::Task, TResult> continuationFunction, TaskScheduler scheduler) { throw new NotImplementedException("Task"); }
         * public static Original::Task ContinueWith(
         *  Original::Task self, Action<Original::Task> continuationAction, CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, TaskScheduler scheduler) { throw new NotImplementedException("Task"); }
         * public static Original::Task<TResult> ContinueWith<TResult>(
         *  Original::Task self, Func<Original::Task, TResult> continuationFunction, CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, TaskScheduler scheduler) { throw new NotImplementedException("Task"); }
         *
         * public static void RunSynchronously(
         *  Original::Task self) { throw new NotImplementedException("Task"); }
         * public static void RunSynchronously(
         *  Original::Task self, TaskScheduler scheduler) { throw new NotImplementedException("Task"); }
         *
         * public static void Start(
         *  Original::Task self) { throw new NotImplementedException("Task"); }
         * public static void Start(
         *  Original::Task self, TaskScheduler scheduler) { throw new NotImplementedException("Task"); }
         */

        public static bool WaitRaw(Original::Task self, int timeout, CancellationToken cancellationToken)
        {
            return(WaitAllRaw(new Original::Task[] { self }, timeout, cancellationToken));
        }