Esempio n. 1
0
        //[Obsolete]
        //public static Task<TResult> StartNew<TSource, TResult>(this TaskFactory<TResult> that, TSource state, Func<TSource, TResult> function) where TSource : class
        //{
        //    // tested by
        //    // X:\jsc.svn\examples\javascript\forms\TaskRunExperiment\TaskRunExperiment\ApplicationControl.cs


        //    var x = new InternalTaskExtensionsScope<TSource, TResult> { InternalTaskExtensionsScope_function = function };

        //    return Task<TResult>.Factory.StartNew(x.f, (object)state);
        //}



        // https://sites.google.com/a/jsc-solutions.net/work/knowledge-base/15-dualvr/20160108
        // called by
        // Z:\jsc.svn\core\ScriptCoreLib.Async\ScriptCoreLib.Async\Extensions\TaskAsyncExtensions.cs

        public static Task <TResult> StartNew <TSource, TResult>(this TaskFactory that,
                                                                 TSource state,
                                                                 Func <TSource, TResult> function

                                                                 ) where TSource : class
        {
            if (function == null)
            {
                throw new Exception("function missing");
            }

            // You need to pass a state object to the delegate to reduce memory pressure from lambda variable capture.
            // http://blog.stephencleary.com/2013/08/startnew-is-dangerous.html
            // X:\jsc.svn\examples\javascript\async\test\TestDelayInsideWorker\TestDelayInsideWorker\Application.cs

            // tested by
            // X:\jsc.svn\examples\javascript\forms\TaskRunExperiment\TaskRunExperiment\ApplicationControl.cs
            // X:\jsc.svn\examples\javascript\WebCamToGIFAnimation\WebCamToGIFAnimation\Application.cs
            // X:\jsc.svn\examples\javascript\Test\TestRedirectWebWorker\TestRedirectWebWorker\Application.cs

            var x = new InternalTaskExtensionsScope <TSource, TResult> {
                InternalTaskExtensionsScope_function = function
            };

            //return Task<TResult>.Factory.StartNew(x.f, (object)state);
            return(Task.Factory.StartNew <TResult>(x.f, (object)state));
        }
Esempio n. 2
0
        //cancellationToken: default(CancellationToken),
        //         creationOptions: TaskCreationOptions.LongRunning,
        //         scheduler: TaskScheduler.Default

        public static Task <TResult> StartNew <TSource, TResult>(this TaskFactory that,
                                                                 TSource state,
                                                                 Func <TSource, TResult> function,
                                                                 CancellationToken cancellationToken,
                                                                 TaskCreationOptions creationOptions,
                                                                 TaskScheduler scheduler
                                                                 ) where TSource : class
        {
            if (function == null)
            {
                throw new Exception("function missing");
            }

            // tested by
            // X:\jsc.svn\examples\javascript\forms\MandelbrotFormsControl\MandelbrotFormsControl\Library\MandelbrotComponent.cs
            // X:\jsc.svn\examples\javascript\forms\TaskRunExperiment\TaskRunExperiment\ApplicationControl.cs


            var x = new InternalTaskExtensionsScope <TSource, TResult> {
                InternalTaskExtensionsScope_function = function
            };

            return(Task <TResult> .Factory.StartNew(
                       x.f,
                       (object)state,
                       cancellationToken,
                       creationOptions,
                       scheduler
                       ));
        }
Esempio n. 3
0
        public static Task Run(Action action)
        {
            // X:\jsc.svn\examples\javascript\async\AsyncHopToUIFromWorker\AsyncHopToUIFromWorker\Application.cs

            // X:\jsc.svn\core\ScriptCoreLib.Async\ScriptCoreLib.Async\Extensions\TaskAsyncExtensions.cs
            // X:\jsc.svn\examples\javascript\Test\TestHopToThreadPoolAwaitable\TestHopToThreadPoolAwaitable\Application.cs
            // X:\jsc.svn\core\ScriptCoreLib.Extensions\ScriptCoreLib.Extensions\Extensions\TaskExtensions.cs

            //return Task.Factory.StartNew(action);



            // do we need InternalTaskExtensionsScope ?
            var xx = new InternalTaskExtensionsScope {
                InternalTaskExtensionsScope_function = action
            };


            var x = new __Task <object>();

            x.InternalInitializeInlineWorker(
                new Action(xx.f),
                //action,
                default(object),
                default(CancellationToken),
                default(TaskCreationOptions),
                TaskScheduler.Default
                );


            x.Start();

            return((Task <object>)x);
        }