20240208 await 和 async的运用

本文解释了C#中异步编程的概念,强调了使用await的关键要求,如必须在async方法中使用且操作数需为Task或其派生类型。还介绍了如何创建和使用不同类型的Task来实现异步任务。
摘要由CSDN通过智能技术生成

执行任务的时候有时需要异步和同步,同步的意思是一个任务执行完成后再执行下一个,异步的意思是,A执行后,不管结果,立即开始B任务, 

如果使用了await,则必须的是Task类型的函数,定义函数的时候,就需要Task<int>;其中Task是指定了函数返回的任务类型,int是返回值类型,可以是其他的;

    public static async void callMethod()
    {
        Task<int> task = Method1();
        int count = await task;
        Method2();
        Method3(count);
    }

    public static async Task<int> Method1()
    {
        int count = 0;
        await Task.Run(() =>
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(" Method 1");
                count += 1;
                Thread.Sleep(200);
            }
        });
        return count;
    }

    public static void Method2()
    {
        for (int i = 0; i < 15; i++)
        {
            Console.WriteLine(" Method 2");
            Thread.Sleep(200);
        }
    }

    public static void Method3(int count)
    {
        Console.WriteLine("Total count is " + count);
    }
}

只能在通过 async 关键字修改的方法、lambda 表达式或匿名方法中使用 await 运算符。 在异步方法中,不能在同步函数的主体、lock 语句块内以及不安全的上下文中使用 await 运算符。

await 运算符的操作数通常是以下其中一个 .NET 类型:Task、Task<TResult>、ValueTask 或 ValueTask<TResult>。 但是,任何可等待表达式都可以是 await 运算符的操作数。 有关详细信息,请参阅 C# 语言规范中的可等待表达式部分。

以上内容是引用的MDSN中的解释原话,我的理解如下,

如果要使用await,则使用的方法,lambda表达式或者其他匿名方法必须使用 async修饰,否则不能使用;

await 运算符,必须再 Task 类型的函数前面,一共有几种,主要用的是Task 无返回值,Task<Tretsult> 两种

可以等等的任务的建立方法

        public static async Task<int > Method4()
        {
            int ret = await Task<int>.Run(() => {
                for (int i = 0; i < 15; i++)
                {
                    Console.WriteLine(" Method4");
                    Thread.Sleep(200);
                }
                return 1000;
            });
            return ret;
        }

        public static async Task Method5()
        {
            await Task.Run(() => {
                for (int i = 0; i < 15; i++)
                {
                    Console.WriteLine(" Method4");
                    Thread.Sleep(200);
                }
            });
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值