持续更新,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;
}