namespace Hotline.Share.Tools;

public static class TaskExtensions
{
    /// <summary>
    /// 为 Task 类型的扩展方法，如果实体不为 null，则执行指定的操作。
    /// </summary>
    /// <typeparam name="T">实体的类型</typeparam>
    /// <param name="task">Task 实例</param>
    /// <param name="action">要执行的操作</param>
    /// <returns>Task 返回自身</returns>
    public static async Task Then<T>(this Task<T> task, Func<T, Task> action)
    {
        var result = await task;

        if (result != null)
        {
            await action(result);
        }
    }

    public static async Task<string> Then<T>(this Task<T> task, Func<T, Task<string>> action, Func<T, Task<string>> nullCatch)
    {
        var result = await task;

        if (result != null)
        {
            return await action(result);
        }
        else
        {
            return await nullCatch(result);
        }
    }

    /// <summary>
    /// 为 Task 类型的扩展方法，如果实体不为 null，则执行指定的操作。
    /// </summary>
    /// <typeparam name="T">实体的类型</typeparam>
    /// <param name="task">Task 实例</param>
    /// <param name="action">要执行的操作</param>
    /// <returns>Task 返回自身</returns>
    public static async Task Then<T>(this Task<T> task, Action<T> action)
    {
        var result = await task;

        if (result != null)
        {
            action(result);
        }
    }

}

