C# Thread應用(二)

在 C# Thread應用(一) 已經實行到委派
接著要用lambda來完成





程式碼:

private void button5_Click(object sender, EventArgs e)
{
    ThreadStart ts = new ThreadStart(() => {
        for (int i = 10; i <= 100; i+=10)                
            Console.WriteLine(Thread.CurrentThread.Name + ":" + i);                
    });
    Thread t1 = new Thread(ts);
    t1.Name = "lambda Thread";
    t1.Start();

}

private void button6_Click(object sender, EventArgs e)
{
    Task.Run(() =>
    {
        for (int i = 10; i <= 100; i += 10)
        {
            Console.WriteLine("lambda Task:"+i);                    
        }                
    });
}
其中 ( ) => { } 就是lambda,是C#中很強悍的應用
本來要寫完整的函式,是要寫:

 private string xxx (){return "abc";}

若是匿名函式,只會在此用一次,別處不會用:

 new string(){return "abc";}

lambda更屌,跟據要求就回傳要求的型態
也不new了,也不用string了,直接改成:

()=>{return "abc";}


如此即完成一個匿名的函式。
接著在本例中,有個叫Task
是更為方便的應用,Thread是一個工人
Task可以像成是一個承包商,由一群工人組成
並且有更棒的回應程式功能
應用更為廣泛,可以實現像Android中的AsyncTask
舉個例子:

若要執行某件會做很久事,通常在按下後,會出現「請稍等…」的訊息
若按下沒什麼反應,往往會覺得怪怪的
Task 搭配 Async await,即可實現提示訊息
比上一篇的委派更方便使用了!

程式碼:


private void button7_Click(object sender, EventArgs e)
{
    //這是像Thread直接調用並且執行            
    Task.Run(() => {
        for (int i = 1; i <= 100; i++)
        {
            Console.WriteLine("主工作:" + i);
            Thread.Sleep(100);                    
        }
    });
}
       
private async void button8_Click(object sender, EventArgs e)
{
    label2.Text = "開始執行計算...";
            
    long ans = await Task.Run(() => {
        //使用lambda 並配合async await,即可執行理想的顯示
        long sum = 0;
        for (int i = 1; i <= 2100000000; i++)
            sum += i;
        return sum;
    });
             
    label2.Text = ans.ToString();
}

說明:async可以單獨調用,await 一定要配合async才可以使用

留言

熱門文章