C#多线程的基础整理(中)——Task和async await

本文详细介绍了C#中Task的使用,包括如何通过Task获取函数返回值,实现任务完成后自动启动新任务。此外,文章深入探讨了C#5.0引入的异步编程关键字async/await,解析了它们如何简化多线程编程,避免阻塞,并举例说明了async/await在实际代码中的应用。
摘要由CSDN通过智能技术生成

前言

关于C#多线程的使用,想必网上已经有很多前辈进行过详细的总结。笔者在此再次进行整理,主要目的在于对自己学到的东西做一个总结和记录。本人接触C#的时间尚短,想必在很多地方还有缺陷,还请可能存在的读者们予以谅解并加以指教;如果本文真的能帮助到一些读者的话,那笔者实在是不胜荣幸。

更好的多线程使用方法——Task

上一篇文章中笔者对ThreadThreadPool的基础使用方法进行了整理,并提到了Task。那么这一篇文章,就来开始介绍TaskTask位于System.Threading.Tasks命名空间中,其简单的使用方法和Thread有些类似,都可以通过函数(和参数)来创建并开始运行:

static void Func1()
{
    int r = 0;
    //一个耗时的操作
    for (int i = 0; i != int.MaxValue; ++i)
    {
        ++r;
    }
    Console.Out.WriteLine(r);
}
static void Func2(object obj)
{
    Thread.Sleep(1000);
    //模拟一个耗时的操作
    Console.Out.WriteLine("Func2 is running with {0}", obj as string);
}
static void Main(string[] args)
{
    //如果不需要,可以不保留Task对象,
    //直接进行执行
    new Task(Func1).Start();

    //使用了Run方法的版本
    //Task.Run(() => Func1());

    Task.Run(() => Func2("Task"));

    //使用了Start方法的版本
    //便于理解如何为Task传递参数
    //new Task(Func2, "Task").Start();

    Console.In.Read();
}

以上的代码通过Task创建了两个任务,分别运行Func1Func2Main中的第一行代码创建了Task对象并立刻调用了Start,实际使用中也可以先创建完Task对象后再调用Start。但是按照《CLR via C#》一书中的说法,创建Task对象并立即调用Start是常见的编程模式,因此Task类中也提供了静态方法Run用于创建并调用任务。Main中的第二行代码便是使用了Run方法,其参数是一个lambda表达式,并在lambda表达式生成的匿名函数中调用了

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值