コード例 #1
0
        /// <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));
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
 public static Task AsTask(this WaitHandle handle)
 {
     return(handle.AsTask(Timeout.InfiniteTimeSpan));
 }