凡人修仙传之晴天传
小白從零到架構(gòu)師的修仙之路-多線程(1)
- 前言
- 異步
- 異步委托Action
- 異步回調(diào)
- 異步等待
- 異步委托Func或Func<>
前言
進(jìn)程,線程,多線程,同步,異步這些概念,接觸過的應(yīng)該都比較熟悉,此處不做贅述,第一次寫博客,寫的比較爛,純粹做個分享.
異步
所謂的異步和同步,同步順序執(zhí)行,異步則是當(dāng)線程執(zhí)行到異步的時候,會跳過繼續(xù)往下執(zhí)行,異步委托則開啟新的線程去執(zhí)行異步.
異步委托Action
Action<String> action = Do;action.BeginInvoke("some string ", null, null);執(zhí)行Do函數(shù) Do參數(shù)為BeginInvoke的第一個參數(shù),第二個參數(shù)為回調(diào)callback,Action的String表示異步委托方法的參數(shù)類型為String
Action<String> action = Do;//Do函數(shù)打印傳入的參數(shù) action.BeginInvoke("some string ", null, null); Console.WriteLine("111");執(zhí)行結(jié)果
some string 111異步回調(diào)
異步回調(diào)指的是異步執(zhí)行完畢后執(zhí)行的操作,如下
AsyncCallback callback = ar => {Console.WriteLine("等待結(jié)束"); }; Action<String> action = Do; action.BeginInvoke("new new new ", callback, null); Console.WriteLine("111");執(zhí)行結(jié)果:
111 new new new 等待結(jié)束線程執(zhí)行到異步委托跳過,打印111,異步委托執(zhí)行打印new new new,異步委托執(zhí)行完畢執(zhí)行回調(diào)函數(shù),打印等待結(jié)束.
異步等待
AsyncCallback callback = ar =>{Console.WriteLine("等待結(jié)束");};Action<String> action = Do;var b = action.BeginInvoke("new new new ", callback, null);//方式一:一直等待while (!b.IsCompleted){//Thread.Sleep(100);}//方式二:一直等待b.AsyncWaitHandle.WaitOne(-1);//方式三:等待指定毫秒,超時就不等待了繼續(xù)往下執(zhí)行b.AsyncWaitHandle.WaitOne(1000);Console.WriteLine("111");執(zhí)行結(jié)果:
new new new 等待結(jié)束 111線程執(zhí)行至異步操作,跳過繼續(xù)執(zhí)行,while循環(huán)判斷異步操作是否完成,此時主線程等待異步操作執(zhí)行完畢,開始執(zhí)行回調(diào)函數(shù),回調(diào)函數(shù)執(zhí)行完畢,線程繼續(xù)往下執(zhí)行.
異步委托Func或Func<>
同樣是異步委托,Action沒有返回值,Func<>則有.
Func<T,ResultT> T:委托封裝的方法的參數(shù)類型 ResultT委托封裝的方法的返回值類型
Func<T,ResultT>(T arg) T:委托封裝的方法的參數(shù)類型 ResultT委托封裝的方法的返回值類型 arg:委托封裝方法的參數(shù),類型T
當(dāng)<>內(nèi)只有一個類型時,默認(rèn)為返回值類型
結(jié)果:
111 1 66 77總結(jié)
- 上一篇: 【获取路径grob()】学习笔记
- 下一篇: 云端创建MySQL数据库