XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension

【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Diagnostics;

namespace XFEExtension.NetCore.TaskExtension;

/// <summary>
/// 任务的拓展
/// </summary>
public static class TaskExtension
{
    private static long _cTimeCounter;
    #region 新建任务并开始
    /// <summary>
    /// 新建一个任务并开始
    /// </summary>
    /// <param name="action"></param>
    /// <returns>运行的任务</returns>
    public static Task StartNewTask(this Action action)
    {
        return Task.Run(action);
    }
    /// <summary>
    /// 新建一个任务并开始
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="action"></param>
    /// <param name="t">对象</param>
    /// <returns></returns>
    public static Task StartNewTask<T>(this Action<T> action, T t)
    {
        return Task.Run(() => action(t));
    }
    /// <summary>
    /// 新建一个任务并开始
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="func"></param>
    /// <returns></returns>
    public static async Task<T> StartNewTask<T>(this Func<T> func)
    {
        return await Task.Run(func);
    }
    #endregion
    /// <summary>
    /// 等待任务完成
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="task"></param>
    /// <returns></returns>
    public static T WaitAndGetResult<T>(this Task<T> task)
    {
        task.Wait();
        return task.Result;
    }
    /// <summary>
    /// 计算一段代码执行所需时间
    /// </summary>
    /// <param name="action"></param>
    /// <param name="autoOutPut">自动输出</param>
    /// <param name="timerName">该次计时标识名</param>
    /// <returns></returns>
    public static TimeSpan CTime(this Action? action, bool autoOutPut = true, string timerName = "无标识名计时器")
    {
        var timeCounter = new Stopwatch();
        timeCounter.Start();
        action?.Invoke();
        timeCounter.Stop();
        _cTimeCounter++;
        var elapsedTime = timeCounter.Elapsed;
        if (autoOutPut)
            if (elapsedTime.TotalHours >= 1)
                Console.WriteLine($"标识名:{timerName}\t执行批次:{_cTimeCounter}\t执行时间:{elapsedTime}");
            else if (elapsedTime.TotalMinutes >= 1)
                Console.WriteLine($"标识名:{timerName}\t执行批次:{_cTimeCounter}\t执行时间: {Math.Floor(elapsedTime.TotalMinutes)} 分 {elapsedTime.Seconds} 秒");
            else if (elapsedTime.TotalSeconds >= 1)
                Console.WriteLine($"标识名:{timerName}\t执行批次:{_cTimeCounter}\t执行时间: {elapsedTime.TotalSeconds:F3} 秒");
            else if (elapsedTime.TotalMilliseconds >= 1)
                Console.WriteLine($"标识名:{timerName}\t执行批次:{_cTimeCounter}\t执行时间: {elapsedTime.TotalMilliseconds:F3} 毫秒");
            else if (elapsedTime.TotalMicroseconds >= 1)
                Console.WriteLine($"标识名:{timerName}\t执行批次:{_cTimeCounter}\t执行时间: {elapsedTime.TotalMicroseconds:F3} 微秒");
            else
                Console.WriteLine($"标识名:{timerName}\t执行批次:{_cTimeCounter}\t执行时间: {elapsedTime.TotalNanoseconds:F3} 纳秒");
        return elapsedTime;
    }
}