🍐☘️🍏πŸ₯¬πŸ₯¦πŸŒ³πŸŒ²
μΉ΄ν…Œκ³ λ¦¬
μž‘μ„±μΌ
2023. 8. 22. 10:55
μž‘μ„±μž
Λ—Λ‹ ΰ­¨ΰ­§ ΛŠΛ—

동기(Synchronous)

  • λ©”μ„œλ“œκ°€ μ™„λ£Œλ  λ•ŒκΉŒμ§€ μ½”λ“œ 싀행이 μ°¨λ‹¨λ˜λŠ” 것
  • μž‘μ—…μ€ μˆœμ„œλŒ€λ‘œ μ‹€ν–‰λ˜λ―€λ‘œ ν•˜λ‚˜μ˜ μž‘μ—…μ΄ 끝날 λ•ŒκΉŒμ§€ λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ§€ μ•ŠμŒ
μ½”λ“œ
	//동기 λ©”μ„œλ“œ
        private void RunAnything(Label lbl) //μ•„λ¬΄κ±°λ‚˜ μ‹€ν–‰ν•˜λŠ” ν•¨μˆ˜
        {
            for (int i = 0; i < 30; i++)
            {
                Thread.Sleep(100); //μŠ€λ ˆλ“œλ₯Ό μ΄μš©ν•΄ μ•½κ°„μ˜ λ”œλ ˆμ΄λ₯Ό 쀌. 루프 1νšŒλ‹Ή 0.1초의 λ”œλ ˆμ΄
                lbl.Text = i.ToString(); //루프 인덱슀만큼 화면상에 λ³΄μ—¬μ€Œ
                lbl.Refresh(); //화면상에 λ³΄μ—¬μ€˜μ•Όν•¨
            }
        }
        
	//동기
        private void btnWalking_Click(object sender, EventArgs e)
        {
            RunAnything(lblWalking);
        }

        private void btnPhone_Click(object sender, EventArgs e)
        {
            RunAnything(lblPhone);
        }

        private void btnTalking_Click(object sender, EventArgs e)
        {
            RunAnything(lblTalking);
        }

 λΉ„동기(Asynchronous)

  • λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜κ³  ν•΄λ‹Ή λ©”μ„œλ“œκ°€ μ™„λ£Œλ˜κΈΈ 기닀리지 μ•Šκ³  λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 것
  • 비동기 λ©”μ„œλ“œλŠ” λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œμ—μ„œ μˆ˜ν–‰λ˜λ―€λ‘œ, 메인 μŠ€λ ˆλ“œμ—μ„œ λ‹€λ₯Έ μž‘μ—… μˆ˜ν–‰ κ°€λŠ₯
μ½”λ“œ
	//비동기 λ©”μ„œλ“œ
        private async void RunAnythingAsync(Label lbl)
        {
            for (int i = 0; i < 30; i++)
            {
                await Task.Delay(100); //λ”œλ ˆμ΄λ₯Ό 쀌. 루프 1νšŒλ‹Ή 0.1초의 λ”œλ ˆμ΄
                lbl.Text = i.ToString(); //루프 인덱슀만큼 화면상에 λ³΄μ—¬μ€Œ
                lbl.Refresh(); //화면상에 λ³΄μ—¬μ€˜μ•Όν•¨
            }
        }
        
        //비동기
        private void btnWalking_Click(object sender, EventArgs e)
        {
            RunAnythingAsync(lblWalking);
        }

        private void btnPhone_Click(object sender, EventArgs e)
        {
            RunAnythingAsync(lblPhone);
        }

        private void btnTalking_Click(object sender, EventArgs e)
        {
            RunAnythingAsync(lblTalking);
        }

  • async ν‚€μ›Œλ“œ: 비동기 λ©”μ„œλ“œλ₯Ό λ§Œλ“€κΈ° μœ„ν•œ ν‚€μ›Œλ“œ
  • await ν‚€μ›Œλ“œ: 비동기 λ©”μ„œλ“œκ°€ λͺ¨λ‘ μ™„λ£Œλ  λ•ŒκΉŒμ§€ λŒ€κΈ°ν•˜κΈ° μœ„ν•œ ν‚€μ›Œλ“œ
  • μ΄λ ‡κ²Œ 비동기 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜κ²Œ 되면 UI λ©”μ„œλ“œκ°€ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό 계속 처리 κ°€λŠ₯

 

await ν‚€μ›Œλ“œ μ‚¬μš©

μ½”λ“œ
	//Taskλ₯Ό λ°˜ν™˜ν•΄μ•Ό await ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  수 있음
        private async Task RunAllAsync(Label lbl)
        {
            for (int i = 0; i < 30; i++)
            {
                await Task.Delay(100); //λ”œλ ˆμ΄λ₯Ό 쀌. 루프 1νšŒλ‹Ή 0.1초의 λ”œλ ˆμ΄
                lbAll.Items.Add($"{lbl.Name} - {i}");
            }
        }
        
	//await ν‚€μ›Œλ“œ μ‚¬μš©
        private async void btnAll_Click(object sender, EventArgs e)
        {
            await RunAllAsync(lblWalking);
            await RunAllAsync(lblPhone);
            await RunAllAsync(lblTalking);
        }

  • await ν‚€μ›Œλ“œ μ‚¬μš©μ‹œ, async ν‚€μ›Œλ“œ μ‚¬μš© ν•„μˆ˜

 

await ν‚€μ›Œλ“œ μ‚¬μš©μ•ˆν•¨

μ½”λ“œ
	//Taskλ₯Ό λ°˜ν™˜ν•΄μ•Ό await ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  수 있음
        private async Task RunAllAsync(Label lbl)
        {
            for (int i = 0; i < 30; i++)
            {
                await Task.Delay(100); //λ”œλ ˆμ΄λ₯Ό 쀌. 루프 1νšŒλ‹Ή 0.1초의 λ”œλ ˆμ΄
                lbAll.Items.Add($"{lbl.Name} - {i}");
            }
        }

        //await ν‚€μ›Œλ“œ μ‚¬μš© μ•ˆν•¨
        private void btnAll_Click(object sender, EventArgs e)
        {
            RunAllAsync(lblWalking);
            RunAllAsync(lblPhone);
            RunAllAsync(lblTalking);
        }

 

 

https://github.com/cherry-kiwi/CS-Async-Lecture

 

'μœ λ‹ˆν‹° > C# κ°œλ…' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

C# 비동기와 μ“°λ ˆλ“œ  (1) 2023.08.22
C# 비동기 μ·¨μ†Œ  (0) 2023.08.22
onDrag?.Invoke(eventData);  (0) 2023.08.14
C# ν”„λ‘œκ·Έλž˜λ°  (0) 2023.01.11
코루틴 (Co+routine)  (0) 2022.11.09