Thread类的简单使用
基本用法一:调用方法:
void Method_NewThread2()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"[newThread2]:{i}");
}
}
Thread newThread2 = new Thread(Method_NewThread2);
调用的该方法可为同一个方法中的方法,也可为同一个类中的静态方法或同一个类中的非静态方法(实例方法)
基本用法二:匿名委托
Thread thread5 = new Thread(delegate ()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"委托型[{i}][id:{Thread.CurrentThread.ManagedThreadId}][name:{Thread.CurrentThread.Name}]");
}
})
{ Name = "委托型的线程" };
基本用法三:Lambda表达式
Thread newThread1 = new Thread(() =>
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"[newThread1]:{i}");
}
})
{ Name = "新线程1" };
线程类:将Thread封装在一个类中,以至于继承自该封装类的所有类都具有多线程能力。
public abstract class MyThreads
{
Thread thread1=null;
Thread thread2=null;
Thread thread3=null;
public abstract void Run1();
public abstract void Run2();
public abstract void Run3();
public void Start1()
{
if (thread1 == null)
{
thread1 = new Thread(Run1);
thread1.Name = "1号线程";
thread1.Start();
}
}
public void Start2()
{
if(thread2 == null)
{
thread2 = new Thread(Run2);
thread2.Name = "2号线程";
thread2.Start();
}
}
public void Start3()
{
if (thread3 == null)
{
thread3 = new Thread(Run3);
thread3.Name = "3号线程";
thread3.Start();
}
}
}
public class MyThread : MyThreads
{
public override void Run1()
{
Console.WriteLine($"此为[{Thread.CurrentThread.Name}]所实现的方法");
}
public override void Run2()
{
Console.WriteLine($"此为[{Thread.CurrentThread.Name}]所实现的方法");
}
public override void Run3()
{
Console.WriteLine($"此为[{Thread.CurrentThread.Name}]所实现的方法");
}
}
internal class Program
{
static void Main(string[] args)
{
MyThread myThread = new MyThread();
myThread.Start1();
myThread.Start2();
myThread.Start3();
Console.ReadLine();
}
}
Task类的简单使用
三种方式创建Task
static void Main(string[] args)
{
Task task1 = new Task(() =>
{
Console.WriteLine($"通过创建Task对象后调用其Start函数 [{Task.CurrentId}]");
});
task1.Start();
Task task2 = Task.Run(() =>
{
Console.WriteLine($"通过调用Task的静态方法Run [{Task.CurrentId}]");
});
Task task3 = Task.Factory.StartNew(() =>
{
Console.WriteLine($"通过Task工厂 [{Task.CurrentId}]");
});
Console.ReadLine();
}
Task任务后有返回值
static void Main(string[] args)
{
Task<int> task = Task.Factory.StartNew(() =>
{
int sum = 0;
for (int i = 0; i < 10; i++)
{
sum += i;
}
return sum;
});
Console.WriteLine(task.Result);
Console.ReadLine();
}