[Async]Async,Await基本

---.Net Framework 升級至4.5+dom

須要執行異步操做的方法 函數簽名前加上 async 標示  標示這是一個異步方法異步

 public async void Show(String Name)//異步方法
        {
            await InvokeFuncShow("i2");//執行異步操做   InvokeFuncShow異步操做的基本實現
        }

在異步方法內執行異步操做async

當一系列操做中出現await時  則全部await後的操做都會等待await執行完成以後再繼續函數

 Console.WriteLine("0000000000000000000000000000000000000");
            InvokeFuncShow("i1");
            Console.WriteLine("1111111111111111111111111111111111111");
            await InvokeFuncShow("i2");//執行異步操做   InvokeFuncShow異步操做的基本實現
            Console.WriteLine("222222222222222222222222222222222222222222");
            InvokeFuncShow("i3");
            Console.WriteLine("33333333333333333333333333333333333333");
            await InvokeFuncShow("i4");
            Console.WriteLine("4444444444444444444444444444444444444444");

  執行會出現ui

 

其中i1與i2同步執行 可是i3i4須要等到i2徹底執行完成以後方會執行spa

而後是異步操做的具體實現須要用 Task.Run(Func<>)來完成3d

 public async Task InvokeFuncShow(String Name)
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(
                   await Task.Run(() =>
                    {
                        var Sleep = new Random(Guid.NewGuid().GetHashCode()).Next(1, 500);
                        System.Threading.Thread.Sleep(Sleep);
                        return Name + "|||" + DateTime.Now + "|||" + Sleep + "|||" + i;
                    }));
            }
        }

  

總結起來看 就是blog

async Task<T> _Func    //函數名 須要async修飾
        {
           return  await Task.Run(() =>    //具體實現 
                    {
                       return T;
                    }));
            }
        }

  

完整Code同步

        public async void Show(String Name)//異步方法
        {
            Console.WriteLine("0000000000000000000000000000000000000");
            FuncShow("i1");
            Console.WriteLine("1111111111111111111111111111111111111");
            await FuncShow("i2");//執行異步操做   InvokeFuncShow異步操做的基本實現
            Console.WriteLine("222222222222222222222222222222222222222222");
            FuncShow("i3");
            Console.WriteLine("33333333333333333333333333333333333333");
            await FuncShow("i4");
            Console.WriteLine("4444444444444444444444444444444444444444");
        }
        public async Task FuncShow(String Name)
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(
                   await Task.Run(() =>
                    {
                        var Sleep = new Random(Guid.NewGuid().GetHashCode()).Next(1, 500);
                        System.Threading.Thread.Sleep(Sleep);
                        return Name + "|||" + DateTime.Now + "|||" + Sleep + "|||" + i;
                    }));
            }
        }
        public Task<String> TaskFunc(String Name, Int32 i)
        {
            return Task.Run(() =>
            {
                var Sleep = new Random(Guid.NewGuid().GetHashCode()).Next(1000, 5000);
                System.Threading.Thread.Sleep(Sleep);
                return Name + "|||" + DateTime.Now + "|||" + Sleep + "|||" + i;
            });
        }

  main函數中調用it

  new AsyncFunc().Show("");
            //   new AsyncFunc().Show("");
            Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
            Console.ReadLine();

  執行

 

--以上

相關文章
相關標籤/搜索