Task async/await


1、只有async没有await 会报警告,并当做普通方法执行
2、await后面的内容会被当做是该Task的回调进行执行
3、 返回的结果是Task<T>,其中T为最终结果
4、await关键字只能放在Task前面

5、如果没有return 默认返回Task


返回 Task

 static void Main(string[] args)
        {

            try
            {
                Console.WriteLine("***************程序开始 线程ID:{0}*******************",Thread.CurrentThread.ManagedThreadId);
                TaskFactory taskfactory = new TaskFactory();

                taskfactory.StartNew(new Action(() => {
                    Console.WriteLine("调用DoAsync前");
                    DoAsync();
                    Console.WriteLine("调用后前");
                }));



                Console.WriteLine("***************程序结束 线程ID:{0}*******************", Thread.CurrentThread.ManagedThreadId);

                Console.Read();
            }
            catch (Exception ex)
            {

                throw;
            }
        }

        /// <summary>
        /// async await 会默认返回Task 不需要return
        /// 如果需要返回一个类型 如 string 返回值部分需要写 Task<string>
        /// </summary>
        /// <returns></returns>
        public static async Task<string> DoAsync()
        {
            Task task = Task.Run(new Action(() => {
                Console.WriteLine("执行了一个Task Run");
            }));

            await task;//跳出方法 下面的将作为回调函数执行

            Thread.Sleep(1000);//休眠1秒
            Console.WriteLine("DoAsync 执行完毕 当前线程ID为{0}", Thread.CurrentThread.ManagedThreadId);
            return "123";
        }
结果



非Task返回值

static void Main(string[] args)
        {

            try
            {
                Console.WriteLine("***************程序开始 线程ID:{0}*******************",Thread.CurrentThread.ManagedThreadId);
                TaskFactory taskfactory = new TaskFactory();

                taskfactory.StartNew(new Action(() => {
                    Console.WriteLine("调用DoAsync前");
                    Task<string> t= DoAsync();
                    Console.WriteLine("调用DoAsync后 返回值为{0}",t.Result);
                }));



                Console.WriteLine("***************程序结束 线程ID:{0}*******************", Thread.CurrentThread.ManagedThreadId);

                Console.Read();
            }
            catch (Exception ex)
            {

                throw;
            }
        }

        /// <summary>
        /// async await 会默认返回Task 不需要return
        /// 如果需要返回一个类型 如 string 返回值部分需要写 Task<string>
        /// </summary>
        /// <returns></returns>
        public static async Task<string> DoAsync()
        {
            Task task = Task.Run(new Action(() => {
                Console.WriteLine("执行了一个Task Run");
            }));

            await task;//跳出方法 下面的将作为回调函数执行

            Thread.Sleep(1000);//休眠1秒
            Console.WriteLine("DoAsync 执行完毕 当前线程ID为{0}", Thread.CurrentThread.ManagedThreadId);
            return "123";
        }


结果




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值