/// <summary> /// Waits for either the task completion, or arrival of the stop signal. /// If stop signal was raised, default(T)/null will be returned. /// Otherwise, task result till be returned. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="waitExitSignal"></param> /// <param name="task"></param> /// <returns></returns> public static T WaitUntilStopped <T>(this WaitHandle waitExitSignal, Task <T> task) { Task completedTask; int index = WaitAny(out completedTask, waitExitSignal.AsTask(), ApplicationExiting.AsTask(), task); return(index == 2 ? ((Task <T>)completedTask).Result : default(T)); }
/// <summary> /// Returns true if task was completed, false if exit signal was raised. /// </summary> /// <param name="waitExitSignal"></param> /// <param name="task"></param> /// <returns></returns> public static bool WaitUntilStopped(this WaitHandle waitExitSignal, Task task) { Task completedTask; int index = WaitAny(out completedTask, waitExitSignal.AsTask(), ApplicationExiting.AsTask(), task); return(index == 2); }
public static Task AsTask(this WaitHandle handle) { return(handle.AsTask(Timeout.InfiniteTimeSpan)); }