C#编程:Task的使用_简单使用


持续更新,C#学习总结汇总

线程部分

Task的使用

Task的说明

暂时只知道这玩意是实现异步多线程的使用法宝

Task的简单使用

//单个使用
Task.Run(()=> {

//丢到后台运行的耗时业务逻辑代码
});
//多个使用
Task[] T = new Task[3];

T[0] = Task.Run(()=>
{
AA();
});

T[1] = Task.Run(() =>
{
BB();
});

T[2] = Task.Run(() =>
{
CC();
});

Task的超时检测

if (!Task.WaitAll(T, 12000))
{
//12000为根据需要填写的延时,12000等于12秒
System.Console.WriteLine("超时结束!");
}

Task的带参数及返回值使用

带返回值

var task3 = Task.Run(() =>
{

return false;
});
System.Console.WriteLine($"运行结果 {task3.Result}");

//多个使用和返回值

带一个参数和返回值

var reset = Task.Run(() => isTest("ss"));
var t = reset.Result;

System.Console.WriteLine($"运行结果!{t}");
private static bool isTest(string isno)
{
return true;
}

多个使用和带返回值

Task<bool>[] T = new Task<bool>[3];

T[0] = Task.Run(()=>
{
AA();
return false;
});

T[1] = Task.Run(() =>
{
BB();
return true;
});

T[2] = Task.Run(() =>
{
CC();
return false;
});


if (!Task.WaitAll(T, 12000))
{
System.Console.WriteLine($"超时结束!{T[0].Result} {T[1].Result} {T[2].Result}");
}

带多个参数和带返回值

var ss = Task.Run(() => Test(new int[] { 1, 2, 3}, new string[] { "AAA", "BBB"}));
var tt = ss.Result;

System.Console.WriteLine($"{tt}");
private static bool Test(params object[] obj)
{
int num = obj.Length;
int[] axisnos = null;
string[] AXSI = null;

//此处必须事先知道需要传入的数组类型
axisnos = (int[])obj[0];
AXSI = (string[])obj[1];

System.Console.WriteLine($"num is {num}");

for (int j = 0; j < axisnos.Length; j++)
{
System.Console.WriteLine($"{axisnos[j]} ");
}
for (int j = 0; j < AXSI.Length; j++)
{
System.Console.WriteLine($"{AXSI[j]} ");
}

return true;
}