页首Html代码

C# async await的使用

async 声明一个包含异步代码的函数,该函数执行时不会阻塞调用线程。

async标记的函数返回值必须为 void ,Task,Task<TResult>

await 必须修饰Task 或者Task<TResult>

await之后的代码运行线程:对于纯console工程,还是耗时任务的线程,

对于winform线程,则是调用线程。

 

典型代码

 

        public static async Task<int> CalAsync()
        {
            string tid = Thread.CurrentThread.ManagedThreadId.ToString();
            Console.WriteLine("当前位置async函数,await之前,线程ID"+tid);
            int result = await Task.Run(new Func<int>(Cal));
            tid = Thread.CurrentThread.ManagedThreadId.ToString();
            Console.WriteLine("当前位置async函数,await之后,线程ID" + tid);
            return result;
        }

全部代码

class Program
    {
        static void Main(string[] args)
        {
            string tid = Thread.CurrentThread.ManagedThreadId.ToString();
            Console.WriteLine("当前位置主函数,调用async异步之前,线程ID"+tid);
            Task<int> t = CalAsync();
            Console.WriteLine("当前位置主函数,调用async异步之后,线程ID" + tid);
            Console.Read();

        }
        public static async Task<int> CalAsync()
        {
            string tid = Thread.CurrentThread.ManagedThreadId.ToString();
            Console.WriteLine("当前位置async函数,await之前,线程ID"+tid);
            int result = await Task.Run(new Func<int>(Cal));
            tid = Thread.CurrentThread.ManagedThreadId.ToString();
            Console.WriteLine("当前位置async函数,await之后,线程ID" + tid);
            return result;
        }

        public static int Cal()
        {
            string tid = Thread.CurrentThread.ManagedThreadId.ToString();
            Console.WriteLine("当前位置耗时函数,线程ID"+tid);
            int sum = 0;
            for (int i = 0; i < 999; i++)
            {
                sum = sum + i;
            }
            Console.WriteLine("当前位置耗时函数完成,线程ID" + tid);
            return sum;
        }


    }
View Code

输入内容

 

 

winform中优雅的实现

private async void button1_Click(object sender, EventArgs e)
        {
            var t = Task.Run(() =>
            {
                Thread.Sleep(5000);
                return "Returning from TimeConsuming task";
            });
            this.Text = await t;
        }

 

 

参考

https://www.cnblogs.com/doforfuture/p/6293926.html

posted @ 2019-04-08 12:16  noigel  阅读(2221)  评论(0编辑  收藏  举报
js脚本