Hoons 닷넷 정기세미나
Windows 8 Sysop

    Hoons 닷넷 6기 Silverlight Sysop
    Hoons 닷넷 7기 Windows 8 Sysop
    HugeFlow 근무
    Windows 8 13인의 멘토 그룹
    해커톤 , WOWZAPP Windows 8 C# 멘토로 활동
    서울 시립대 C# 및 Windows 8 강의
    현재 Windows 8 용 멜론앱 개발중
Agenda

    C#의 변천사
    C# 5.0 (Caller)
    C#의 비동기 패턴
    C# 5.0 비동기 패턴
    Question
C# 1.0

    Managed Code
    Delegate
C# 2.0
       Boxing


Primitive   object
Type
                     Generic
Custom
Type




      Unboxing
C# 3.0

              • var query = from p in People
                            select new
     Query                  {
 Expression                     Name = p.name,
                               Age = p.age
                            };



  Lambda
 Expression   •x => x * x;
C# 4.0

    dynamic 타입 지원
    인터페이스와 대리자에 Covariance와 Contravariance를 지원
C#의 변천사


                                                  C# 5.0
                                  C# 4.0          • Asynchronous
                                  • Dynamic         Programming
                                    Programming
                         C# 3.0
                         • LINQ


              C# 2.0
              Generics


    C# 1.0
    Managed
    Code
Caller

    CallerFilePath
    CallerLineNumber
    CallerMemberName
CallerMemberName

        Caller occurs within        Member name result
  Method, property or event    호출한 메서드나 프로퍼티나 이벤트의 이름


  Constructor                  “.ctor” 문자열

  Static Constructor           “.cctor” 문자열

  Destructor                   “Finalize” 문자열
Demo
비동기 프로그래밍?

   복잡한 작업이 프로그램의 나머지 부분들과 동시에 실행할 수 있도록 구현
    하는 기술.
   주로 복잡한 작업이나 오래 걸리는 작업으로 인해 UI가 동작하지 않고 멈추
    는 현상이 발생하는 그래픽 UI가 있는 프로그램에서 사용된다.
var




var
C#에서 제공하는 비동기 패턴

    Thread
    ThreadPool
    Event based pattern
    IAsyncResult pattern
    Task based asynchronous pattern
    Etc….
Thread & ThreadPool

    닷넷에서 사용되는 가장 기본적인 Thread 객체
Event based pattern

    가장 많이 사용하는 비동기 방식                 RunWork
    이벤트를 통해 완료시점을 알 수 있음
    구현에 대한 규칙이 딱히 공식적으로 정해지지 않음

                                   Dowork




                                      Completed
IAsyncResult pattern




       BeginInvoke   AsyncCallback   EndInvoke
Task based asynchronous pattern

    반환타입에 따라 Task 또는 Task<TResult>를 반환
    접미사로 Async 사용, 만약 Async를 사용 중이면 TaskAsync 추가
async / await

    public async void GetAsync()
     {
         await HttpClient.DownloadAsync(…);
     }
Demo
Asynchronous methods automatically
transform normal code into a callback state
machine
private class btnDoWork_ClickStateMachine : IAsyncStateMachine
{
   // Member fields for preserving locals and other necessary state
   int $state;
   TaskAwaiter<string> $awaiter;
   int result;
   ...
   // Method that moves to the next state in the state machine
   public void MoveNext()
   {
       // Jump table to get back to the right statement upon resumption
       switch (this.$state)
       {
           ...
           case 2: goto Label2;
           ...
       }
       ...
       // Expansion of await ...;
       var tmp1 = ThreadPool.RunAsync(delegate { this.result = Compute(); });
       this.$awaiter = tmp1.GetAwaiter();
       if (!this.$awaiter.IsCompleted)
       {
           this.$state = 2;
           this.$awaiter.OnCompleted(MoveNext);
           return;
           Label2:
       }
       this.$awaiter.GetResult();
       ...
   }
Question
To be continue…

Hoons 닷넷 정기세미나

  • 1.
  • 2.
    Windows 8 Sysop  Hoons 닷넷 6기 Silverlight Sysop  Hoons 닷넷 7기 Windows 8 Sysop  HugeFlow 근무  Windows 8 13인의 멘토 그룹  해커톤 , WOWZAPP Windows 8 C# 멘토로 활동  서울 시립대 C# 및 Windows 8 강의  현재 Windows 8 용 멜론앱 개발중
  • 3.
    Agenda  C#의 변천사  C# 5.0 (Caller)  C#의 비동기 패턴  C# 5.0 비동기 패턴  Question
  • 4.
    C# 1.0  Managed Code  Delegate
  • 5.
    C# 2.0 Boxing Primitive object Type Generic Custom Type Unboxing
  • 6.
    C# 3.0 • var query = from p in People select new Query { Expression Name = p.name, Age = p.age }; Lambda Expression •x => x * x;
  • 7.
    C# 4.0  dynamic 타입 지원  인터페이스와 대리자에 Covariance와 Contravariance를 지원
  • 8.
    C#의 변천사 C# 5.0 C# 4.0 • Asynchronous • Dynamic Programming Programming C# 3.0 • LINQ C# 2.0 Generics C# 1.0 Managed Code
  • 9.
    Caller  CallerFilePath  CallerLineNumber  CallerMemberName
  • 10.
    CallerMemberName Caller occurs within Member name result Method, property or event 호출한 메서드나 프로퍼티나 이벤트의 이름 Constructor “.ctor” 문자열 Static Constructor “.cctor” 문자열 Destructor “Finalize” 문자열
  • 11.
  • 12.
    비동기 프로그래밍?  복잡한 작업이 프로그램의 나머지 부분들과 동시에 실행할 수 있도록 구현 하는 기술.  주로 복잡한 작업이나 오래 걸리는 작업으로 인해 UI가 동작하지 않고 멈추 는 현상이 발생하는 그래픽 UI가 있는 프로그램에서 사용된다.
  • 13.
  • 14.
    C#에서 제공하는 비동기패턴  Thread  ThreadPool  Event based pattern  IAsyncResult pattern  Task based asynchronous pattern  Etc….
  • 15.
    Thread & ThreadPool  닷넷에서 사용되는 가장 기본적인 Thread 객체
  • 16.
    Event based pattern  가장 많이 사용하는 비동기 방식 RunWork  이벤트를 통해 완료시점을 알 수 있음  구현에 대한 규칙이 딱히 공식적으로 정해지지 않음 Dowork Completed
  • 17.
    IAsyncResult pattern BeginInvoke AsyncCallback EndInvoke
  • 18.
    Task based asynchronouspattern  반환타입에 따라 Task 또는 Task<TResult>를 반환  접미사로 Async 사용, 만약 Async를 사용 중이면 TaskAsync 추가
  • 19.
    async / await  public async void GetAsync() { await HttpClient.DownloadAsync(…); }
  • 20.
  • 21.
    Asynchronous methods automatically transformnormal code into a callback state machine
  • 22.
    private class btnDoWork_ClickStateMachine: IAsyncStateMachine { // Member fields for preserving locals and other necessary state int $state; TaskAwaiter<string> $awaiter; int result; ... // Method that moves to the next state in the state machine public void MoveNext() { // Jump table to get back to the right statement upon resumption switch (this.$state) { ... case 2: goto Label2; ... } ... // Expansion of await ...; var tmp1 = ThreadPool.RunAsync(delegate { this.result = Compute(); }); this.$awaiter = tmp1.GetAwaiter(); if (!this.$awaiter.IsCompleted) { this.$state = 2; this.$awaiter.OnCompleted(MoveNext); return; Label2: } this.$awaiter.GetResult(); ... }
  • 23.
  • 24.

Editor's Notes

  • #12 콜러에 대한 간단한 데모를 먼저 보시겠습니다.