C# 彻底搞懂async/await

copy 备用 

  C# 彻底搞懂async/await - 五维思考 - 博客园 (cnblogs.com)

异步方法
微软建议异步方法的命名是在方法名后添加Aysnc后缀
异步方法的返回类型只能是void、Task、Task<TResult>
async 修饰异步方法
private async Task AsyncMethod()
用async来修饰一个方法,表明这个方法是异步的,声明的方法的返回类型必须为:void或Task或Task<TResult>。
方法内部必须含有await修饰的方法,如果方法内部没有await关键字修饰的表达式,哪怕函数被async修饰也只能算作同步方法,执行的时候也是同步执行的。

异步方法内人await修饰
被await修饰的只能是Task或者Task<TResule>类型,
通常情况下是一个返回类型是Task/Task<TResult>的方法,当然也可以修饰一个Task/Task<TResult>变量,
await只能出现在已经用async关键字修饰的异步方法中。
关于被修饰的对象,也就是返回值类型是Task和Task<TResult>函数或者Task/Task<TResult>类型的变量:如果是被修饰对象的前面用await修饰,那么返回值实际上是void或者TResult

 

static string testString = "12345";
        private static async void func1async()
        {
            var t = Task.Run(() => {
                Thread.Sleep(5000);
                Console.WriteLine("4444 " + DateTime.Now.ToString("G") + " My Thread ID is :" + Thread.CurrentThread.ManagedThreadId);
                return "Hello I am TimeConsumingMethod";
            });
            testString = await t;
            Console.WriteLine("3333 " + DateTime.Now.ToString("G") + " My Thread ID is :" + Thread.CurrentThread.ManagedThreadId);
            Console.WriteLine(testString);
            Console.WriteLine("5555 " + DateTime.Now.ToString("G") + " My Thread ID is :" + Thread.CurrentThread.ManagedThreadId);
        }
        private static void test_async()
        {
            Console.WriteLine("1111 " + DateTime.Now.ToString("G") +" My Thread ID is :" + Thread.CurrentThread.ManagedThreadId);
            Console.WriteLine(testString);
            func1async( );
            Console.WriteLine("2222 " + DateTime.Now.ToString("G") + " My Thread ID is :" + Thread.CurrentThread.ManagedThreadId);
            Console.WriteLine(testString);

        }

  

posted @ 2021-10-10 23:01  点内特学习资料自用  阅读(362)  评论(0)    收藏  举报