编程语言
首页 > 编程语言> > c#-异步编程基础-使用Awaiter

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
CallerWithAwaiter 1
GreetingAsync 4 1
Greeting 4 1
CallerWithAwaiter 4

 

标签:异步,traceThreadAndTask,nameof,string,c#,void,System,Awaiter,using
来源: https://blog.csdn.net/xie__jin__cheng/article/details/96098990