비동기 프로그래밍에서 Task.Delay의 독립적인 실행

2024. 7. 22. 13:32·C#/Window
반응형

비동기 프로그래밍을 할 때 Task.Delay를 사용하면 각 Task가 독립적으로 실행되는 것을 알아두면 좋습니다. 이 포스팅에서는 Task.Delay를 사용할 때의 핵심 원리와 특징을 살펴보겠습니다.

1. 독립적인 실행

아래와 같은 코드에서 statusTask와 backgroundTask는 서로 독립적으로 실행됩니다.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
    private static readonly CancellationTokenSource cts = new CancellationTokenSource();

    private static async Task Main(string[] args)
    {
        var statusTask = MainStatusTask();
        var backgroundTask = BackgroundTask();

        await Task.WhenAll(statusTask, backgroundTask);
    }

    private static async Task MainStatusTask()
    {
        while (true)
        {
            Console.WriteLine("Main status task is running...");
            await Task.Delay(60000, cts.Token);
        }
    }

    private static async Task BackgroundTask()
    {
        var _ThreadSleep = 6000;

        while (true)
        {
            Console.WriteLine("Background task is running...");
            await Task.Delay(_ThreadSleep * 10, cts.Token);
        }
    }
}

statusTask에서는 60초 동안 대기하고, backgroundTask에서는 60초 * 10 = 600초 동안 대기합니다. 하지만 이 두 Task는 서로 영향을 주지 않습니다.

2. 비동기 실행

await Task.Delay를 사용하면 해당 Task의 실행이 일시 중지되지만, 다른 Task의 실행에는 영향을 주지 않습니다. 따라서 두 Task는 병렬로 실행될 수 있습니다.

3. 동시 실행

두 Task가 병렬로 실행되므로, 한 Task가 대기 중일 때 다른 Task는 계속 실행될 수 있습니다. 예를 들어 statusTask에서 60초 대기 중일 때 backgroundTask는 계속해서 자신의 로직을 실행할 수 있습니다.

4. CancellationToken의 역할

cts.Token은 두 Task 모두에서 사용되지만, 이는 취소 신호를 전달하기 위한 것이며 동기화를 위한 것이 아닙니다. 취소 요청이 있을 때만 두 Task가 동시에 영향을 받습니다.

따라서 각 Task의 Task.Delay는 서로 독립적으로 작동하며, 한 Task의 대기가 다른 Task의 실행에 직접적인 영향을 주지 않습니다. 이는 두 Task가 병렬로 실행되면서 각자의 타이밍에 따라 작업을 수행하고 대기하게 됨을 의미합니다.

저작자표시 비영리 변경금지 (새창열림)

'C# > Window' 카테고리의 다른 글

Windows Forms의 ComboBox에 아이템 추가하는 방법들  (2) 2024.07.29
.NET 프로젝트의 출력 폴더 이름 변경하기  (0) 2024.07.28
Windows Forms PictureBox  (3) 2024.07.24
RichTextBox에 텍스트 추가하고 자동 스크롤하기  (0) 2024.07.23
SendMessage와 PostMessage  (0) 2024.05.26
'C#/Window' 카테고리의 다른 글
  • .NET 프로젝트의 출력 폴더 이름 변경하기
  • Windows Forms PictureBox
  • RichTextBox에 텍스트 추가하고 자동 스크롤하기
  • SendMessage와 PostMessage
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    devlife
    codingtips
    셀레니움
    리스트
    appdevelopment
    list
    파이썬
    긴유통기한우유
    ipcamera
    rtsp
    codingcommunity
    리뷰관리
    리뷰이관
    스크립트 실행 순서
    Python
    카페24리뷰이관
    programmerlife
    믈레코비타멸균우유
    learntocode
    스마트스토어리뷰
    쇼핑몰리뷰
    카페24리뷰
    스크립트 실행
    C#
    라떼우유
    unity
    programming101
    상품 리뷰 크롤링
    cv2
    유니티
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
비동기 프로그래밍에서 Task.Delay의 독립적인 실행
상단으로

티스토리툴바