/// <summary>
        /// Waits for the workflow to reach the unloaded state.
        /// </summary>
        /// <param name="timeout">The timeout.</param>
        /// <returns></returns>
        public bool WaitOne(TimeSpan timeout)
        {
            SynchronizationContext.ExecuteQueue(timeout);
            var ret = Unloaded.WaitOne(0);

            lock (Result)
            {
                if (Result != null && Result.Error != null)
                {
                    throw Result.Error;
                }
            }
            return(ret);
        }