コード例 #1
0
ファイル: FuncPriorityManager.cs プロジェクト: juanp3053/UPS
        /// <summary>
        ///
        /// </summary>
        /// <param name="func"></param>
        /// <param name="checkpoint"></param>
        /// <param name="priority"></param>
        /// <returns></returns>
        public static async Task <Guid> EnqueueAsync(Func <Task <object> > func, Func <Task <bool> > checkpoint, Priority priority = Priority.High)
        {
            if (Interlocked.CompareExchange(ref isInitiated, 0, 0) == 1)
            {
                var referencedTask = new ReferencedFunc <object> {
                    guid = Guid.NewGuid(), func = func, checkpoint = checkpoint
                };
                GetQueue((int)priority).Enqueue(referencedTask);

                if (Interlocked.CompareExchange(ref isProcessing, 0, 0) == 0)
                {
                    await StartProcessing();
                }

                return(referencedTask.guid);
            }
            else
            {
                throw new InvalidOperationException("Service has not been Initiated.");
            }
        }
コード例 #2
0
ファイル: FuncPriorityManager.cs プロジェクト: juanp3053/UPS
 private static void EnqueueReferencedFunc(ReferencedFunc <object> referencedTask)
 {
     GetQueue(referencedTask.priority).Enqueue(referencedTask);
 }
コード例 #3
0
ファイル: FuncPriorityManager.cs プロジェクト: juanp3053/UPS
 private static async Task ExecuteAsync(ReferencedFunc <object> referencedTask)
 {
     await(referencedTask?.func?.Invoke());
 }