상세 컨텐츠

본문 제목

[C#] 동기/ 비동기 정의

코딩하는코알라/C#

by 룰루랄라코알라 2023. 7. 26. 08:03

본문

동기 : 순차적으로 진행
비동기 : 작업을 병렬로 진행 (다른작업이 끝날때까지 기다릴 필요가 없다)

 

대표적 비동기 / 동기 함수
비동기 : BeginInvoke , Async 
동기 : Invoke

 

TIP : delegate 
C# delegate는 C/C++의 함수 포인터와 비슷한 개념으로 
메서드 파라미터와 리턴 타입에 대한 정의를 한 후, 동일한 파라미터와 리턴 타입을 가진 메서드를 서로 호환해서 불러 쓸 수 있는 기능이다. (블로그참조)
//메소드를 참조할 수있다.
delegate void MySettingDelegate(string str);

 

 

델리게이트를 사용한 Sort 문 

class MySort
{
    // 델리게이트 CompareDelegate 선언
    public delegate int CompareDelegate(int i1, int i2);

    public static void Sort(int[] arr, CompareDelegate comp)
    {
        if (arr.Length < 2) return;
        Console.WriteLine("함수 Prototype: " + comp.Method);

        int ret;
        for (int i = 0; i < arr.Length - 1; i++)
        {
            for (int j = i+1; j < arr.Length; j++)
            {
                ret = comp(arr[i], arr[j]);
                if (ret == -1)
                {
                    // 교환
                    int tmp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = tmp;
                }
            }
        }
        Display(arr);
    }
    static void Display(int[] arr)
    {
        foreach (var i in arr) Console.Write(i + " ");
        Console.WriteLine();
    }
}

class Program
{
    static void Main(string[] args)
    {
        (new Program()).Run();
    }

    void Run()
    {
        int[] a = { 5, 53, 3, 7, 1 };
        
        // 올림차순으로 소트
        MySort.CompareDelegate compDelegate = AscendingCompare;
        MySort.Sort(a, compDelegate);

        // 내림차순으로 소트
        compDelegate = DescendingCompare;
        MySort.Sort(a, compDelegate);            
    }

    // CompareDelegate 델리게이트와 동일한 Prototype
    int AscendingCompare(int i1, int i2)
    {
        if (i1 == i2) return 0;
        return (i2 - i1) > 0 ? 1 : -1;
    }

    // CompareDelegate 델리게이트와 동일한 Prototype
    int DescendingCompare(int i1, int i2)
    {
        if (i1 == i2) return 0;
        return (i1 - i2) > 0 ? 1 : -1;
    }
}

 

 

반응형

'코딩하는코알라 > C#' 카테고리의 다른 글

[C#] 고급문법_람다식  (0) 2023.07.31
[C#] Thread 해제 및 크로스 Thread 발생  (0) 2023.07.28
[C#] Thread 기본  (0) 2023.07.24
C# 날짜 시간 차이 비교  (0) 2023.06.28
Farpoint spead 디자인 요약  (0) 2022.12.27

관련글 더보기