Exemple #1
0
 static Logger()
 {
     _getNow = delegate()
     {
         return(DateTime.Now);
     };
 }
 /// <summary>
 /// 从队列中删除一个方法
 /// </summary>
 /// <param name="executeCode">委托方法</param>
 public void Remove(EmptyDelegateCode executeCode)
 {
     lock (_codeQueue)
     {
         _codeQueue.Remove(executeCode);
     }
 }
 /// <summary>
 /// 在队列指定位置插入一个要执行的方法
 /// </summary>
 /// <param name="index">位置索引</param>
 /// <param name="executeCode">委托方法</param>
 public void Insert(int index, EmptyDelegateCode executeCode)
 {
     lock (_codeQueue)
     {
         _codeQueue.Insert(index, executeCode);
     }
 }
 /// <summary>
 /// 将一个方法添加到要执行的方法的队列列尾
 /// </summary>
 /// <param name="executeCode">委托方法</param>
 public void Add(EmptyDelegateCode executeCode)
 {
     lock (_codeQueue)
     {
         _codeQueue.Add(executeCode);
     }
 }
 /// <summary>
 /// 删除队列指定位置的一个方法
 /// </summary>
 /// <param name="index">委托方法</param>
 public void RemoveAt(int index)
 {
     lock (_codeQueue)
     {
         EmptyDelegateCode executeCode = _codeQueue.ElementAt(index);
         Remove(executeCode);
     }
 }
Exemple #6
0
 /// <summary>
 /// <inheritdoc cref="RunAsync(EmptyDelegateCode)"/>
 /// </summary>
 /// <typeparam name="TResult">返回值类型</typeparam>
 /// <param name="executeCode">委托方法</param>
 /// <returns></returns>
 public static async Task <TResult> RunAsync <TResult>(EmptyDelegateCode <TResult> executeCode)
 {
     return(await Task.Run(() =>
     {
         TResult result = default(TResult);
         if (executeCode != null)
         {
             result = executeCode.Invoke();
         }
         return result;
     }));
 }
 /// <summary>
 /// 执行队列中的第一个方法
 /// </summary>
 public void ExecuteNext()
 {
     if (_codeQueue.Count == 0)
     {
         return;
     }
     lock (_codeQueue)
     {
         EmptyDelegateCode executeCode = _codeQueue.FirstOrDefault();
         if (executeCode == null)
         {
             return;
         }
         Remove(executeCode);
         executeCode.Invoke();
     }
 }
        /// <summary>
        /// 以异步的方式执行队列中的第一个方法
        /// </summary>
        /// <param name="cancelToken">取消异步执行的信号</param>
        /// <returns></returns>
        public async Task ExecuteNextAsync(CancellationToken cancelToken = default)
        {
            if (_codeQueue.Count == 0)
            {
                return;
            }
            EmptyDelegateCode executeCode = null;

            lock (_codeQueue)
            {
                executeCode = _codeQueue.FirstOrDefault();
            }
            if (executeCode == null)
            {
                return;
            }
            Remove(executeCode);
            await Task.WhenAny(Task.Run(new Action(executeCode), cancelToken));
        }
Exemple #9
0
        /// <summary>
        /// 创建并运行一个新线程
        /// </summary>
        /// <param name="executeCode">线程要执行的方法</param>
        /// <returns></returns>
        public static Thread RunThread(EmptyDelegateCode executeCode)
        {
            ThreadStart threadStart = new ThreadStart(delegate()
            {
                try
                {
                    executeCode?.Invoke();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            });
            Thread executeThread = new Thread(threadStart);

            executeThread.IsBackground = true;
            executeThread.Start();
            return(executeThread);
        }
 /// <summary>
 /// 将一个方法添加到要执行的方法的队列列头
 /// </summary>
 /// <param name="executeCode">委托方法</param>
 public void Shift(EmptyDelegateCode executeCode)
 {
     Insert(0, executeCode);
 }
Exemple #11
0
 /// <summary>
 /// 以异步的方式运行一个委托方法
 /// </summary>
 /// <param name="executeCode">委托方法</param>
 /// <returns></returns>
 public static async Task RunAsync(EmptyDelegateCode executeCode)
 {
     await Task.Run(() => executeCode?.Invoke());
 }