Example #1
0
        /// <summary>
        /// Schedules the given function using an actor timer.
        /// </summary>
        /// <param name="func"></param>
        protected Task <TResult> InvokeWithTimerAsync <TResult>(Func <Task <TResult> > func)
        {
            Contract.Requires <ArgumentNullException>(func != null);

            var cs = new TaskCompletionSource <TResult>();

            InvokeWithTimer(async() => await cs.SafeTrySetFromAsync(func));
            return(cs.Task);
        }
Example #2
0
        /// <summary>
        /// Schedules the given action using an actor timer.
        /// </summary>
        /// <param name="action"></param>
        protected Task InvokeWithTimerAsync(Func <Task> action)
        {
            Contract.Requires <ArgumentNullException>(action != null);

            var cs = new TaskCompletionSource <bool>();

            InvokeWithTimer(async() => await cs.SafeTrySetFromAsync(action));
            return(cs.Task);
        }
Example #3
0
        /// <summary>
        /// Enqueues a task to be executed. Returns a second task that proxies the results of the first.
        /// </summary>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="func"></param>
        /// <returns></returns>
        public Task <TResult> Enqueue <TResult>(Func <Task <TResult> > func)
        {
            if (func == null)
            {
                throw new ArgumentNullException(nameof(func));
            }

            // schedule task on task queue
            var tc = new TaskCompletionSource <TResult>();

            queue.Enqueue(() => tc.SafeTrySetFromAsync(func));
            OnTaskAdded();
            return(tc.Task);
        }
Example #4
0
        /// <summary>
        /// Enqueues a task to be executed. Returns a second task that proxies the results of the first.
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        public Task Enqueue(Func <Task> action)
        {
            if (action == null)
            {
                throw new ArgumentNullException(nameof(action));
            }

            // schedule task on task queue
            var tc = new TaskCompletionSource <bool>();

            queue.Enqueue(() => tc.SafeTrySetFromAsync(action));
            OnTaskAdded();
            return(tc.Task);
        }