Task:
Task(任务) 是在 ThreadPool(线程池)的基础上推出的。
* ThreadPool中有若干个数量的线程,如果有任务需要处理时,会才从栈程池中获取一个空闲的线程来执行任务,任务执行管完毕后线程不会销毁。而是被线程池回收供以后使用。
* 当线程池中所有的线程都在忙碌,又有新的任务进来,线程池一般会新建一个线程来处理这个任务,如果线程池数量达到上限,任务会排队,等待其他任务释放线程后再执行。
* 这样操作线程池能减少线程的创建,节省开销。
异步操作:
1. new 方式来创建一个task,需要调用的时候再执行。
cs
Task task = new Task(() =>
{
Thread.Sleep(1000);
Console.WriteLine($"task的进程的id为:{Thread.CurrentThread.ManagedThreadId}");
});
2.调用一个任务
cs
task.Start();
Task task2 = new Task(() =>
{
Thread.Sleep(1000);
Console.WriteLine($"task2的进程的id为:{Thread.CurrentThread.ManagedThreadId}");
});
task2.Start();
3.同步执行"按照从上至下的顺序"。
cs
Fun2();
Console.WriteLine("===============");
Fun();
Console.ReadLine();
}
static void Fun()
{
Thread.Sleep(1000);
Console.WriteLine("hello1");
}
static void Fun2()
{
Thread.Sleep(1000);
Console.WriteLine("hello2");
}
}
}
异步方法
同步操作读取文件函数
cs
public static string Fn1()
{
FileStream file = new FileStream(@"text.txt",FileMode.Open);
byte[] buffer = new byte[file.Length];
file.Read(buffer,0,buffer.Length);
string res = Encoding.UTF8.GetString(buffer);
return res;
}
异步操作读取文件函数
cs
async public static Task<String> Fn2()
{
FileStream file = new FileStream(@"text.txt",FileMode.Open);
byte[] buffer = new byte[file.Length];
file.Read(buffer, 0, 10);
string res = Encoding.UTF8.GetString(buffer);
return res;
}