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); } }
/// <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)); }
/// <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); }
/// <summary> /// 以异步的方式运行一个委托方法 /// </summary> /// <param name="executeCode">委托方法</param> /// <returns></returns> public static async Task RunAsync(EmptyDelegateCode executeCode) { await Task.Run(() => executeCode?.Invoke()); }