首页 > 编程语言 >C# async await 异步编程

C# async await 异步编程

时间:2023-11-26 10:12:33浏览次数:34  
标签:Task Console string C# await WriteLine async

开始

异步方法不等于多线程,await是等但又是不等。

1. 调用系统的async方法
static async Task Main(string[] args)
{
    await File.WriteAllTextAsync("a.txt", "xxxxxxxxxx");
    string s = await File.ReadAllTextAsync("a.txt");
    Console.WriteLine(s);
}

使用await关键字调用async方法,await表示等待await File.WriteAllTextAsync("a.txt", "xxxxxxxxxx");执行到这里时,如果这句话没执行完成,后面的代码不会运行。

  • 如果方法中使用了await关键字,则方法必须改为async修饰的方法。
  • Main 函数使用async修饰后,返回值要改成Task
  • 如果是winform里面的按钮或其他事件用async修饰后,返回值不需要修改为Task
  • 返回值代表的意思:Task=void;Task=int;Task=string
2. 不使用await调用系统的async方法
static void Main(string[] args)
{
    // 调用无返回值使用wait方法
    File.WriteAllTextAsync("a.txt", "xxxxxxxxxx").Wait();
    // 调用有返回值使用Result属性
    string s = File.ReadAllTextAsync("a.txt").Result;
    Console.WriteLine(s);
}
3. 使用Delay实现sleep等延时等待效果
  • 在多线程中,如果需要等待几秒后再执行,则需要使用Thread.Sleep(1000);来等待,但是这个函数会造成主线程堵塞,将系统卡住,等计时结束才会重新恢复系统。而使用await Task.Delay(1000)则不会造成系统堵塞。
static async Task Main(string[] args)
{

    Console.WriteLine("1");
    await mm("aa");
    Console.WriteLine("2");
}
static async Task mm(string n)
{
    Console.WriteLine(n + "开始");
    await Task.Delay(5000);
    Console.WriteLine(n + "结束");
}

上述代码的执行结果是:

1
aa开始
等待5000毫秒后。。。
aa结束
2
4.线程池中使用async
static void Main(string[] args)
{
    ThreadPool.QueueUserWorkItem(async (obj) =>
    {
        while (true)
        {
            Console.WriteLine("xxxxxxxxxxxx");
        }
    });
    Console.ReadLine();
}

因为只是在方法中使用了async所以不需要将方法用async修饰,方法的返回值也不需要修改为Task,只有方法中用到了await才需要使用async修饰方法。

标签:Task,Console,string,C#,await,WriteLine,async
From: https://www.cnblogs.com/sunhouzi/p/17856551.html

相关文章

  • C# 使用Task执行异步操作
    原文链接:C#使用Task执行异步操作-Ryan_zheng-博客园(cnblogs.com)为什么要使用Task线程是创建并发的底层工具,因此具有一定的局限性。没有简单的方法可以从联合(Join)线程得到“返回值”。因此必须创建一些共享域。当抛出一个异常时,捕捉和处理异常也是麻烦的。线程完成之......
  • python 将docx按页分割
    Python将docx按页分割在进行文档处理过程中,有时我们需要将一个大的docx文件按页分割成多个小文件,这样可以更方便地处理、管理和查看文档内容。本文将介绍如何使用Python来实现这个功能,并提供相应的代码示例。docx文档格式简介在开始介绍具体的代码实现之前,我们先来了解一下docx......
  • 试题 D: 本质上升序列(C/C++)
    题目描述:小蓝特别喜欢单调递增的事物。在一个字符串中,如果取出若干个字符,将这些字符按照在字符串中的顺序排列后是单调递增的,则成为这个字符串中的一个单调递增子序列。例如,在字符串lanqiao中,如果取出字符n和q,则nq组成一个单调递增子序列。类似的单调递增子序列还有lnq......
  • 统计指定月份的总金额,用SUMPRODUCT函数快速解决!
    1职场实例小伙伴们大家好,今天我们来讲解一个关于SUMPRODUCT函数解决指定月份汇总金额的职场真实案例。如下图所示:是一张每日的产品数量单价明细表格。A列为日期,B列为数量,C列为单价,数量乘以单价即为当天的总金额,但是总金额数据在数据源中是没有体现出来的。我们想要在F2单元格汇总出......
  • Clion的中文编码问题
    此文章用于解决Clion编译源代码后运行显示乱码问题!首先打开设:全部改为UTF-8再将文件的编码改为GBK:最后运行:......
  • Eslint 的rules一些配置 (.eslintrc.js文件中的rules选项)
    rules:{//off=0,warn=1,error=2,如果是数组,第二项表示参数option//indent:[2,2],//控制缩进为2eqeqeq:1,//警告使用全等//quotes:[2,'single'],//单引号singleQuote:true,'no-console':0,//不禁用console'no-debugger......
  • 使用skforecast进行时间序列预测
    时间序列预测是数据科学和商业分析中基于历史数据预测未来价值的一项重要技术。它有着广泛的应用,从需求规划、销售预测到计量经济分析。由于Python的多功能性和专业库的可用性,它已经成为一种流行的预测编程语言。其中一个为时间序列预测任务量身定制的库是skforecast。在本文中,将......
  • Educational Codeforces Round 158 (Rated for Div. 2)
    EducationalCodeforcesRound158(RatedforDiv.2)基本情况A题很水,几分钟秒了。B题想到一个解,被自己hack掉之后没有重新想,一直想在自己一开始的基础上改好,结果最后B都没拿下。B.ChipandRibbon我的思路其实也是找规律,根本没严谨地证明正确性。不应该一条路走到黑的......
  • Docker部署思源笔记
    一、简介思源笔记是一款隐私优先的个人知识管理系统,支持细粒度块级引用和Markdown所见即所得。二、安装思源笔记绿联DX4600为例。首先我们打开Docker管理器,进入镜像管理。然后在镜像仓库中搜索b3log/siyuan​​,选择latest​​版本并下载。​​下载完成后,我们在本地镜......
  • .net core下优秀的日志框架使用解析,附源代码
    在.NETCore中,日志是一个非常重要的组件,它可以帮助我们记录应用程序的运行情况,以便在出现问题时进行排查。在本文中,我们将介绍五个优秀的.NETCore日志框架,它们分别是Serilog、NLog、Log4Net、Microsoft.Extensions.Logging和Loupe。我们将为每个框架提供使用方法及步骤,并......