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; } }