C#Task简单应用

本文详细介绍了C#中Task的创建与控制,包括Task的四种创建方式、等待任务完成的方法如Wait、WaitAll、WaitAny和ContinueWith,以及Task的取消和异常处理机制。通过实例展示了如何在任务中处理异常和取消操作,强调了正确处理异常以避免程序意外终止的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、创建Task

方式1:
  Task t1 = new Task(() => {
//To Do you code 也可以在这直接调用方法,直接传递参数,也比较方便
});
  t1.Start();
  Task.WaitAll(t1);//等待所有任务结束
  注:
  任务的状态:
  Start之前为:Created
  Start之后为:WaitingToRun

方式2:
  Task.Run(() => {
//To Do you code 也可以在这直接调用方法,直接传递参数,也比较方便
});

方式3:
  Task.Factory.StartNew(() => {
//To Do you code 也可以在这直接调用方法,直接传递参数,也比较方便
}); 直接异步的方法
  或者
  Task t3=Task.Factory.StartNew(() => {
//To Do you code 也可以在这直接调用方法,直接传递参数,也比较方便
});
t3.Start();
  Task.WaitAll(t3);//等待所有任务结束
  注:
  任务的状态:
  Start之前为:Running
  Start之后为:Running

方式4:
  带返回值的方式
  Task task = CreateTask(“Task 1”);
  task.Start();
  int result = task.Result;

三、Task的任务控制

1、Task.Wait
在上个例子中,我们已经使用过了,task1.Wait();就是等待任务执行完成,我们可以看到最后task1的状态变为Completed。
2、Task.WaitAll
看字面意思就知道,就是等待所有的任务都执行完成,下面我们来写一段代码演示一下:
  static void Main(string[] args)
{
var task1 = new Task(() =>
{
Console.WriteLine(“Task 1 Begin”);
System.Threading.Thread.Sleep(2000);
Console.WriteLine(“Task 1 Finish”);
});
var task2 = new Task(() =>
{
Console.WriteLine(“Task 2 Begin”);
System.Threading.Thread.Sleep(3000);
Console.WriteLine(“Task 2 Finish”);
});

  task1.Start();
  task2.Start();
  Task.WaitAll(task1, task2);
  Console.WriteLine("All task finished!");
  Console.Read();
}

在这里插入图片描述
3、Task.WaitAny
这个用发同Task.WaitAll,就是等待任何一个任务完成就继续向下执行,将上面的代码WaitAll替换为WaitAny,输出结果如下:
在这里插入图片描述
4、Task.ContinueWith
就是在第一个Task完成后自动启动下一个Task,实现Task的延续,下面我们来看下他的用法,编写如下代码:
static void Main(string[] args)
{
var task1 = new Task(() =>
{
Console.WriteLine(“Task 1 Begin”);
System.Threading.Thread.Sleep(2000);
Console.WriteLine(“Task 1 Finish”);
});
var task2 = new Task(() =>
{
Console.WriteLine(“Task 2 Begin”);
System.Threading.Thread.Sleep(3000);
Console.WriteLine(“Task 2 Finish”);
});

  task1.Start();
  task2.Start();
  var result = task1.ContinueWith<string>(task =>
  {
    Console.WriteLine("task1 finished!");
    return "This is task result!";
  });
  
  Console.WriteLine(result.Result.ToString());
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值