C#中的async和await

其实这两个关键字的功效比之前的异步方法调用有一个好处,那就是异步阻塞的方法可以有返回值。之前都是通过回调函数实现,执行上下文会切换,不过和这个执行过程类似。可以对这两个关键字这么理解:遇到async的语句是异步的,遇到await的语句是阻塞的。

复制代码
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Debug.WriteLine("{0} Main Start.", DateTime.Now);
            Thread1();
            Debug.WriteLine("{0} Main End.", DateTime.Now);
            Console.In.ReadLine();
        }

        private static async void Thread1()
        {
            var result = await Proc1();     //此处会阻塞
            Debug.WriteLine("{0} result={1}.", DateTime.Now, result);
        }

        private static Task<int> Proc1()    //注意此处返回类型的定义
        {
            return Task.Run(() => { 
                Debug.WriteLine("{0} Proc 1 start.", DateTime.Now);
                Thread.Sleep(5000);
                Debug.WriteLine("{0} Proc 1 end.", DateTime.Now);
                return 10;
            });
        }
    }
}
复制代码

程序输出:

10/18/2016 11:37:10 Main Start.
10/18/2016 11:37:10 Main End.
10/18/2016 11:37:10 Proc 1 start.
10/18/2016 11:37:15 Proc 1 end.
10/18/2016 11:37:15 result=10.

 

private async void MyWebClient_Navigating(string url)
        {
            await Task.Run(() => { });  //语法有点扯淡,有了这句编译就能通过
            DetailNavigate(url);  //同步方法
        }

 

posted on   空明流光  阅读(1065)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示