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);
}
}
}