Crie um tópico
Existem três maneiras de criar e executar tarefas: Pode receber parâmetros
public void testTask(string[] args)
{
//1.new方式实例化一个Task,需要通过Start方法启动
Task task = new Task(() =>
{
Thread.Sleep(100);
Console.WriteLine($"hello, task1的线程ID为{
Thread.CurrentThread.ManagedThreadId}");
});
task.Start();
//2.Task.Factory.StartNew(Action action)创建和启动一个Task
Task task2 = Task.Factory.StartNew(() =>
{
Thread.Sleep(100);
Console.WriteLine($"hello, task2的线程ID为{
Thread.CurrentThread.ManagedThreadId}");
});
//3.Task.Run(Action action)将任务放在线程池队列,返回并启动一个Task
Task task3 = Task.Run<string>(() =>
{
Thread.Sleep(100);
return $"hello, task3的线程ID为{
Thread.CurrentThread.ManagedThreadId}";
});
Console.WriteLine("执行主线程!");
Console.ReadKey();
}
Método de bloqueio da tarefa (Wait/WaitAll/WaitAny)
task.Wait() significa aguardar a execução da tarefa e sua função é semelhante a thead.Join(); Task.WaitAll(Task[] tarefas) significa desbloquear somente após todas as tarefas terem sido executadas; Task.WaitAny( Task[]
tarefas ) significa que o bloqueio será liberado assim que uma tarefa for executada.
//阻塞主线程。task1,task2都执行完毕再执行主线程
//执行【task1.Wait();task2.Wait();】可以实现相同功能
Task.WaitAll(new Task[] {
taskwait1, taskwait2 });
Após o uso, o thread atual é bloqueado e aguarda o término do thread usado.
Se WaitAll for substituído por WaitAny, o bloqueio do thread será desbloqueado após a execução de qualquer tarefa. Qual é o resultado da execução?
Operação de continuação de tarefa (WhenAny/WhenAll/ContinueWith)
//task1,task2执行完了后执行后续操作
Task.WhenAll(task, task2).ContinueWith((t) =>
{
Thread.Sleep(100);
Console.WriteLine("执行后续操作完毕!");
});
//通过TaskFactroy实现 等待完成后执行后续的线程
Task.Factory.ContinueWhenAll(new Task[] {
task, task2 }, (t) =>
{
Console.WriteLine($"hello, task ContinueWhenAll的线程ID为{
Thread.CurrentThread.ManagedThreadId}");
});