using System.Runtime.CompilerServices;
namespace XFEExtension.NetCore.TaskExtension;
///
/// 传入值并终止等待器
///
/// 泛型
/// 任务ID
/// 目标等待器返回值
public delegate void EndTaskTrigger(T result, string taskId = "DEFAULTTASKID");
///
/// XFE等待器
///
/// 泛型
public class XFEWaitTask
{
private TaskCompletionSource WaitTaskSource { get; set; } = new TaskCompletionSource();
///
/// 任务ID
///
public string TaskId { get; set; }
///
/// 结束任务并返回
///
/// 返回结果
/// 任务ID
public void EndTask(T result, string taskId)
{
if (taskId == TaskId)
WaitTaskSource.SetResult(result);
}
///
/// 获取等待器
///
///
public TaskAwaiter GetAwaiter() => WaitTaskSource.Task.GetAwaiter();
///
/// XFE等待器
///
/// 触发任务结束事件
/// 任务ID
public XFEWaitTask(ref EndTaskTrigger endTaskAndReturn, string taskId = "DEFAULTTASKID")
{
endTaskAndReturn += EndTask;
TaskId = taskId;
}
}