using System;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApp1
{
//测试创建Task示例的各种方式
public class TaskTest
{
//定义方法,返回void,入参为Object
private static void OpNormal(Object state)
{
Console.WriteLine("In OpNormal,state=" + state);
Thread.Sleep(1000);
}
//定义方法,返回void,入参非Object
private static void OpWithParamInt(Int32 state)
{
Console.WriteLine("In OpWithParamInt,state=" + state.ToString());
Thread.Sleep(1000);
}
//定义方法,返回类型非void,入参非Object
private static Int32 OpWithParamIntAndReturnInt(Int32 state)
{
Console.WriteLine("In OpWithParamIntAndReturnInt,state=" + state.ToString());
Thread.Sleep(1000);
return state;
}
//定义方法,返回类型非void,入参为多个
private static String OpWithParamIntAndReturnInt2(ParamObj o)
{
String str = o.n.ToString() + o.s;
Console.WriteLine("In OpWithParamIntAndReturnInt2,state=" + o.n.ToString() + ",s=" + o.s);
Thread.Sleep(1000);
return str;
}
class ParamObj
{
public int n { get; set; }
public string s { get; set; }
}
public static void RunTest()
{
//参数Object,无返回值
Task t1 = new Task(OpNormal, 100);
t1.Start();
//参数Int32,无返回值
Task t2 = new Task(state => OpWithParamInt((Int32)state), 200);
t2.Start();
//参数Int32,有返回值
Task<Int32> t3 = new Task<Int32>(n => OpWithParamIntAndReturnInt((Int32)n), 300);
//Task<Int32> t3 = new Task<Int32>(() => OpWithParamIntAndReturnInt(300)); //另一种写法
t3.Start();
//指定参数timeout,毫秒,如果在指定时间内执行完毕则返回true,否则返回false.
bool b = t3.Wait(1000000);
Console.WriteLine("The result is:" + t3.Result + ",The wait result is:" + b.ToString());
//多个参数,有返回值
ParamObj obj = new ParamObj { n = 400, s = "aaa" };
try
{
Task<String> t4 = new Task<string>(o => OpWithParamIntAndReturnInt2((ParamObj)o), obj);
t4.Start();
Console.WriteLine("The OpWithParamIntAndReturnInt2 result is:" + t4.Result);
}
catch (Exception ex)
{
}
}
}
}