/// <summary>
 /// Decoration that flags a task as being asynchronous and provides the conditions needed to trigger completion and error.
 /// Automatically decorates with TriggerConditions.
 /// </summary>
 /// <param name="task"></param>
 /// <returns></returns>
 public static IAsynchronousDecoration IsAsynchronous(this ITask task, ICondition markCompleteCondition, ICondition markErrorCondition)
 {
     Condition.Requires(task).IsNotNull();
     var rv = task.As<AsynchronousDecoration>();
     if (rv == null)
         rv = new AsynchronousDecoration(task, markCompleteCondition, markErrorCondition);
     return rv;
 }
        /// <summary>
        /// Decoration that flags a task as being asynchronous and provides the conditions needed to trigger completion and error.
        /// Automatically decorates with TriggerConditions.
        /// </summary>
        /// <param name="task"></param>
        /// <returns></returns>
        public static IAsynchronousDecoration IsAsynchronous(this ITask task, ICondition markCompleteCondition, ICondition markErrorCondition)
        {
            Condition.Requires(task).IsNotNull();
            var rv = task.As <AsynchronousDecoration>();

            if (rv == null)
            {
                rv = new AsynchronousDecoration(task, markCompleteCondition, markErrorCondition);
            }
            return(rv);
        }