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.Runtime.CompilerServices;

namespace XFEExtension.NetCore.TaskExtension;

/// <summary>
/// 传入值并终止等待器
/// </summary>
/// <typeparam name="T">泛型</typeparam>
/// <param name="taskId">任务ID</param>
/// <param name="result">目标等待器返回值</param>
public delegate void EndTaskTrigger<T>(T result, string taskId = "DEFAULTTASKID");

/// <summary>
/// XFE等待器
/// </summary>
/// <typeparam name="T">泛型</typeparam>
public class XFEWaitTask<T>
{
    private TaskCompletionSource<T> WaitTaskSource { get; set; } = new TaskCompletionSource<T>();
    /// <summary>
    /// 任务ID
    /// </summary>
    public string TaskId { get; set; }
    /// <summary>
    /// 结束任务并返回
    /// </summary>
    /// <param name="result">返回结果</param>
    /// <param name="taskId">任务ID</param>
    public void EndTask(T result, string taskId)
    {
        if (taskId == TaskId)
            WaitTaskSource.SetResult(result);
    }
    /// <summary>
    /// 获取等待器
    /// </summary>
    /// <returns></returns>
    public TaskAwaiter<T> GetAwaiter() => WaitTaskSource.Task.GetAwaiter();
    /// <summary>
    /// XFE等待器
    /// </summary>
    /// <param name="endTaskAndReturn">触发任务结束事件</param>
    /// <param name="taskId">任务ID</param>
    public XFEWaitTask(ref EndTaskTrigger<T> endTaskAndReturn, string taskId = "DEFAULTTASKID")
    {
        endTaskAndReturn += EndTask;
        TaskId = taskId;
    }
}