콜백은 서버가 클라이언트에게 비동기적으로 피드백을 주기 위해서 주로 사용하는 방법이다.

이를 위해 멀티스레딩 기술도 사용되고, 동기적으로 상태를 갱신하는 기법도 활용된다.

콜백은 C#에서 델리게이트를 이용하여 표현된다.

델리게이트를 이용하면 타입 안정적인 콜백을 정의할 수 있다. 대부분의 경우에 델리게이트는 event

와 함께 사용되지만 반드시 그래야 하는 것은 아니다. 여러 클래스가 상호 통신을 수행해야 할 때

클래스 간의 결합도를 낮추고 싶다면 인터페이스보다 델리게이트를 사용하는 것이 좋다.

델리게이트는 런타임에 통지 대상을 설정할 수 있고, 다수의 클라이언트에게 통지를 보낼수도 있다.

하나의 델리게이트는 여러 메서드에 대한 참조를 포함할 수 있기 때문이다. 각 메서드는 정적 메서드

일 수도 있고, 인스턴스 메서드일 수도 있다. 즉, 델리게이트를 사용하면 통지를 전달하려는 대상이

한 개일 수도 있고 여러 개일 수도 있다. 런타임에 구성하기 나름이다.

콜백과 델리게이트는 C#이 제공하는 관용구의 하나이며 람다 표현식을 사용하는 경우에도 널리 활용된다. .NET Framework 라이브러리는 Predicate<T>, Action<>, Func<>와 같은 형태로, 자주

사용되는 델리게이트를 정의해두고 있다.

Predicte<T>는 조건을 검사하여 부울값을 반환하는 델리게이트다.

Func<>는 여러 개의 매개변수를 받아 단일의 결과값을 반환하는 델리게이트다.

따라서 Func<T, bool>은 Predicate<T>와 동일하다고 볼 수 있다.

일반적으로 동일한 타입의 매개변수를 취하더라도 반환 타입이 다른 경우 서로 다른 델리게이트

타입으로 간주하며, 컴파일러는 이 둘 사이의 형변환을 허용하지 않는다.

마지막으로 Action<> 은 여러 개의 매개변수를 받지만 반환 타입이 void인 델리게이트다.