c#-异步编程基础-使用Awaiter

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;

// c#-异步编程基础-使用Awaiter
namespace yibBianchengJichu
{

    class Program
    {
        void traceThreadAndTask(string info)
        {
            string taskInfo = Task.CurrentId == null ? "no task" : "task" + Task.CurrentId;
            Console.WriteLine($"{info} in thread {Thread.CurrentThread.ManagedThreadId} " + $"and {taskInfo}");

        }
        string Greeting(string name)
        {
            traceThreadAndTask($"running {nameof(Greeting)}");
            Task.Delay(3000).Wait();
            return $"hello,{name}";
        }
        Task<string> GreetingAsync(string name) => Task.Run<string>(() => {
            traceThreadAndTask($"running {nameof(GreetingAsync)}");
            return Greeting(name);
        });
        async void CallWhithAsync()
        {
            traceThreadAndTask($"started{nameof(CallWhithAsync)}");
            string result = await GreetingAsync("stephanie");
            Console.WriteLine(result);
            traceThreadAndTask($"ended  {nameof(CallWhithAsync)}");
        }
        async void CallWhithSsync2()
        {
            traceThreadAndTask($"started{nameof(CallWhithSsync2)}");
            Console.WriteLine(await GreetingAsync("stephanie2"));
            traceThreadAndTask($"ended  {nameof(CallWhithSsync2)}");
        }
        // 使用Awaiter
        void CallerWithAwaiter()
        {
            traceThreadAndTask($"started{nameof(CallerWithAwaiter)}");
            TaskAwaiter<string> awaiter = GreetingAsync("Matthias").GetAwaiter();
            awaiter.OnCompleted(OnCompleteAwaiter);
            void OnCompleteAwaiter()
            {
                Console.WriteLine(awaiter.GetResult());
                traceThreadAndTask($"started{nameof(CallerWithAwaiter)}");
            }
        }
        // 延续任务
        void CallerWithContinuationTask()
        {
            traceThreadAndTask($"started{nameof(CallerWithContinuationTask)}");
            var t1 = GreetingAsync("stephanie");
            t1.ContinueWith(t =>
            {
                string result = t.Result;
                Console.WriteLine(result);
                traceThreadAndTask($"ended  {nameof(CallerWithContinuationTask)}");
            });
        }
        // 创建任务-调用异步方法-使用Awaiter-延续任务
        void main()
        {
            //traceThreadAndTask("test");
            //同步任务
            //Greeting("test");
            //CallWhithAsync();
            //CallWhithSsync2();
            CallerWithAwaiter();
            //CallerWithContinuationTask();
            Thread.Sleep(8000);
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Program p = new Program();
            p.main();


        }
    }
}

函数名线程id任务id
CallerWithAwaiter1
GreetingAsync41
Greeting41
CallerWithAwaiter4

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值