Ejemplo n.º 1
0
        /// <summary>
        /// Creates a micro thread out of the specified function and schedules it as last micro thread to run in this scheduler.
        /// Note that in case of multithreaded scheduling, it might start before this function returns.
        /// </summary>
        /// <param name="microThreadFunction">The function to create a micro thread from.</param>
        /// <param name="flags">The flags.</param>
        /// <returns>A micro thread.</returns>
        public MicroThread Add(Func <Task> microThreadFunction, MicroThreadFlags flags = MicroThreadFlags.None)
        {
            var microThread = new MicroThread(this, flags);

            microThread.Start(microThreadFunction);
            return(microThread);
        }
Ejemplo n.º 2
0
 public CallbackFromActionBuilder(MicroThread microThread)
 {
     MicroThreadCallback = () =>
     {
         microThread.ThrowIfExceptionRequest();
         MicroThreadAction();
         microThread.ThrowIfExceptionRequest();
     };
 }
Ejemplo n.º 3
0
 public CallbackSendPostCallbackBuilder(MicroThread microThread)
 {
     MicroThreadCallback = () =>
     {
         microThread.ThrowIfExceptionRequest();
         SendOrPostCallback(CallbackState);
         microThread.ThrowIfExceptionRequest();
     };
 }
        public static ChannelMicroThreadAwaiter <T> New(MicroThread microThread)
        {
            lock (pool)
            {
                if (pool.Count > 0)
                {
                    var index    = pool.Count - 1;
                    var lastItem = pool[index];
                    pool.RemoveAt(index);

                    lastItem.MicroThread = microThread;

                    return(lastItem);
                }

                return(new ChannelMicroThreadAwaiter <T>(microThread));
            }
        }
Ejemplo n.º 5
0
        public T GetResult()
        {
            // Check Task Result (exception, etc...)
            var result = Result;

            // After result has been taken, we can reuse this item, so put it in the pool
            // We mitigate pool size, but another approach than hard limit might be interesting
            lock (pool)
            {
                if (pool.Count < 4096)
                {
                    isCompleted  = false;
                    MicroThread  = null;
                    Continuation = null;
                    Result       = default(T);
                }

                pool.Add(this);
            }

            return(result);
        }
Ejemplo n.º 6
0
 public MicroThreadYieldAwaiter(MicroThread microThread)
 {
     this.microThread = microThread;
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SchedulerThreadEventArgs"/> class.
 /// </summary>
 /// <param name="microThread">The micro thread.</param>
 /// <param name="threadId">The managed thread identifier.</param>
 public SchedulerThreadEventArgs(MicroThread microThread, int threadId)
 {
     MicroThread = microThread;
     ThreadId    = threadId;
 }
 public ChannelMicroThreadAwaiter(MicroThread microThread)
 {
     MicroThread = microThread;
 }
Ejemplo n.º 9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SchedulerThreadEventArgs"/> class.
 /// </summary>
 /// <param name="microThread">The micro thread.</param>
 /// <param name="threadId">The managed thread identifier.</param>
 public SchedulerThreadEventArgs(MicroThread microThread, int threadId)
 {
     MicroThread = microThread;
     ThreadId = threadId;
 }
 public MicrothreadProxySynchronizationContext(MicroThread microThread)
 {
     this.microThread = microThread;
 }
Ejemplo n.º 11
0
 public void OnCompleted(Action continuation)
 {
     microThread = scheduler.Add(() => { continuation(); return Task.FromResult(true); });
 }
Ejemplo n.º 12
0
 public SwitchToAwaiter(Scheduler scheduler)
 {
     this.scheduler = scheduler;
     this.microThread = null;
 }
Ejemplo n.º 13
0
 public MicroThreadYieldAwaiter(MicroThread microThread)
 {
     this.microThread = microThread;
 }
Ejemplo n.º 14
0
 public SwitchMicroThread(MicroThread microThread)
 {
     this.microThread = microThread;
     //microThread.SynchronizationContext.IncrementTaskCount();
 }
Ejemplo n.º 15
0
 public void OnCompleted(Action continuation)
 {
     microThread = scheduler.Add(() => { continuation(); return(Task.FromResult(true)); });
 }
Ejemplo n.º 16
0
 public SwitchToAwaiter(Scheduler scheduler)
 {
     this.scheduler   = scheduler;
     this.microThread = null;
 }
Ejemplo n.º 17
0
 public SwitchMicroThread(MicroThread microThread)
 {
     this.microThread = microThread;
     //microThread.SynchronizationContext.IncrementTaskCount();
 }
Ejemplo n.º 18
0
 /// <summary>
 /// Creates a micro thread out of the specified function and schedules it as last micro thread to run in this scheduler.
 /// Note that in case of multithreaded scheduling, it might start before this function returns.
 /// </summary>
 /// <param name="microThreadFunction">The function to create a micro thread from.</param>
 /// <param name="flags">The flags.</param>
 /// <returns>A micro thread.</returns>
 public MicroThread Add(Func<Task> microThreadFunction, MicroThreadFlags flags = MicroThreadFlags.None)
 {
     var microThread = new MicroThread(this, flags);
     microThread.Start(microThreadFunction);
     return microThread;
 }
 public MicroThreadSynchronizationContext(MicroThread microThread)
 {
     this.MicroThread = microThread;
 }
 public MicroThreadSynchronizationContext(MicroThread microThread)
 {
     this.MicroThread = microThread;
 }
Ejemplo n.º 21
0
 public SchedulerEntry(MicroThread microThread) : this()
 {
     MicroThread = microThread;
 }
 public MicrothreadProxySynchronizationContext(MicroThread microThread)
 {
     this.microThread = microThread;
 }