StringDAL

using System;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Test
{
    public interface IStringDAL
    {
        string StringToUpper(string str);
    }

    public class StringDAL : IStringDAL
    {
        /// <summary>
        /// 实例方法
        /// </summary>
        public virtual string StringToUpper(string str)
        {
            return StringToUpper_Impl(str);
        }

        /// <summary>
        /// 静态方法
        /// </summary>
        public static string StringToUpperImpl(string str)
        {
            return StringToUpper_Impl(str);
        }


        /// <summary>
        /// 底层-静态实现
        /// </summary>
        private static string StringToUpper_Impl(string str)
        {
            if (String.IsNullOrWhiteSpace(str) == true) { throw new ArgumentNullException("异常:参数为空"); }

            return str.ToUpper();
        }


        #region Task
        public virtual Task<string> StringToUpperTask(string str)
        {
            return Task.FromResult<string>(StringToUpper(str));//实例方法
        }
        public static Task<string> StringToUpperImplTask(string str)
        {
            return Task.FromResult<string>(StringToUpperImpl(str));//静态方法
        }
        #endregion


        #region Async
        public virtual async Task<string> StringToUpperAsync(string str)
        {
            return await StringToUpperTask(str);//实例方法
        }
        public async static Task<string> StringToUpperImplAsync(string str)//静态方法
        {
            return await StringToUpperImplTask(str);
        }
        #endregion
    }
    

    public class StringDALTask
    {
        #region Task
        public virtual Task<string> StringToUpperTask(string str)
        {
            return Task.Factory.StartNew(() =>
            {
                //StringDAL dal = new StringDAL(); return dal.StringToUpper(str);

                return StringDAL.StringToUpperImpl(str); //不继承的话,就调用上面的静态方法。
            });
        }

        public static Task<string> StringToUpperImplTask(string str)
        {
            return Task.Run(() =>
            {
                return StringDAL.StringToUpperImpl(str);
            });
        }
        #endregion
    }
    

    public class StringDALAsync
    {
        public virtual async Task<string> StringToUpperAsync(string str)
        {
            //StringDALTask dalTask = new StringDALTask(); return await dalTask.StringToUpperTask(str);

            return await StringDALTask.StringToUpperImplTask(str);
        }

        public async static Task<string> StringToUpperImplAsync(string str)
        {
            return await StringDALTask.StringToUpperImplTask(str);
        }
    }
}

 

using System;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Test
{
    public interface IStringDAL
    {
        string StringToUpper(string str);
    }

    public class StringDAL : IStringDAL
    {
        /// <summary>
        /// 实例方法
        /// </summary>
        public virtual string StringToUpper(string str)
        {
            return StringToUpper_Impl(str);
        }

        /// <summary>
        /// 静态方法
        /// </summary>
        public static string StringToUpperImpl(string str)
        {
            return StringToUpper_Impl(str);
        }


        /// <summary>
        /// 底层-静态实现
        /// </summary>
        private static string StringToUpper_Impl(string str)
        {
            if (String.IsNullOrWhiteSpace(str) == true) { throw new ArgumentNullException("异常:参数为空"); }

            return str.ToUpper();
        }


        #region Task
        public virtual Task<string> StringToUpperTask(string str)
        {
            return Task.FromResult<string>(StringToUpper(str));//实例方法
        }

        //public static Task<string> StringToUpperImplTask(string str)
        //{
        //    return Task.FromResult<string>(StringToUpperImpl(str));//静态方法
        //}
        #endregion


        #region Async
        public virtual async Task<string> StringToUpperAsync(string str)
        {
            return await StringToUpperTask(str);//实例方法
        }

        //public async static Task<string> StringToUpperImplAsync(string str)//静态方法
        //{
        //    return await StringToUpperImplTask(str);
        //}
        #endregion
    }


    public class StringDALTask : StringDAL
    {
        #region Task
        public override Task<string> StringToUpperTask(string str)
        {
            return Task.Factory.StartNew(() =>
            {
                return StringToUpper(str); //继承的话,就用上面的实例方法。
            });
        }
        /// <summary>
        /// 重载
        /// </summary>
        public override Task<string> StringToUpperTask(string str,
            CancellationToken token = default(CancellationToken), 
            TaskCreationOptions options = TaskCreationOptions.None, 
            TaskScheduler scheduler = null)
        {
            if (scheduler == null) { scheduler = TaskScheduler.Default; }

            return Task.Factory.StartNew(() =>
            {
                return StringToUpper(str);
            }, token, options, scheduler);
        }


        public static Task<string> StringToUpperImplTask(string str)
        {
            return Task.Run(() =>
            {
                return StringDAL.StringToUpperImpl(str); //options: TaskCreationOptions.DenyChildAttach
            });
        }
        #endregion
    }


    public class StringDALAsync : StringDALTask
    {
        public override async Task<string> StringToUpperAsync(string str)
        {
            return await StringToUpperTask(str);
        }

        public async static Task<string> StringToUpperImplAsync(string str)
        {
            return await StringToUpperImplTask(str);
        }
    }
}

 

posted @ 2016-12-05 23:47  茗::流  阅读(97)  评论(0)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。