■ 대리자를 사용해 비동기 호출하는 방법을 보여준다.
▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
using System; using System.Threading; ... /// <summary> /// 테스트 대리자 /// </summary> /// <param name="threadID">스레드 ID</param> private delegate void TestDelegate(out int threadID); ... #region 테스트 처리하기 - Test(threadID) /// <summary> /// 테스트 처리하기 /// </summary> /// <param name="threadID">스레드 ID</param> private void Test(out int threadID) { threadID = Thread.CurrentThread.ManagedThreadId; Console.WriteLine("[{0} 스레드] 테스트 처리를 시작합니다...", threadID); Console.WriteLine("[{0} 스레드] 스레드풀 사용 여부 : {1}", threadID, Thread.CurrentThread.IsThreadPoolThread); Thread.Sleep(TimeSpan.FromSeconds(2)); Console.WriteLine("[{0} 스레드] 테스트 처리를 종료 합니다...", threadID); } #endregion #region 비동기 콜백 처리하기 - AsyncCallback(asyncResult) /// <summary> /// 비동기 콜백 처리하기 /// </summary> /// <param name="asyncResult">비동기 결과</param> private void AsyncCallback(IAsyncResult asyncResult) { int threadID = Thread.CurrentThread.ManagedThreadId; Console.WriteLine("[{0} 스레드] 비동기 콜백 처리를 시작합니다...", threadID); Console.WriteLine("[{0} 스레드] 비동기 콜백 호출시 전달된 비동기 상태 : {1}", threadID, asyncResult.AsyncState); Console.WriteLine("[{0} 스레드] 스레드 풀 사용 여부 : {1}", threadID, Thread.CurrentThread.IsThreadPoolThread); } #endregion ... TestDelegate testDelegate = Test; IAsyncResult asyncResult = testDelegate.BeginInvoke(out threadID, AsyncCallback, "전달 값 #1"); asyncResult.AsyncWaitHandle.WaitOne(); testDelegate.EndInvoke(out threadID, asyncResult); Console.WriteLine("다음 작업을 실행합니다."); |