You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

Future(미래)와 Promice(약속)은 비동기처리에 있어서 중요한 개념입니다.

미래에는 블록킹이 없기때문에 어느시점 사용가능 해지는 함수의 결과(성공또는 실패등을)

를 담을수 있는 용기라고 보면 됩니다.

Scala에서는 이러한 기능을 위해 동일한 키워드를 지원하며 일반적으로 결과에대한

비동기적인 핸들이라고 이해하시면 되겠으며 C#/JAVA에서도 유사하게 활용이 가능합니다.


관련 참고 원문: 이러한 컨셉은 Java(8)/.net(4.5)의 경우 최신 버젼에서 지원하는것으로 보아 scala에서 영향을 준것으로 보입니다.



Future


.net 에서 Actor 메시지와 비동기처리(Task)를 연동한 샘픞

public class ReActor : ReceiveActor
{
  private ILoggingAdapter log = Context.GetLogger();

  public ReActor()
  {
      string myPath = Self.Path.ToString();

      Receive<string>(message => {
          Handle(message);                
      });

      Receive<DelayReply>(message => {
          Handle(message);
      });
  }

  public void Handle(string str)      //InMessage
  {
      Task.Run(async () =>
      {
          await Task.Delay(1000); //어떠한 값을 기다림
          DelayReply reply = new DelayReply();
          reply.message = str;
          return reply;
      }).PipeTo(Self);
  }

  public void Handle(DelayReply data) //Out
  {
      string logtrace = string.Format("I'am {0} RE:{1}", Self.Path, data.message);
      log.Info(data.message);
      Sender.Tell(data);
  }
          
}

이것은 기존에 가진 모듈을(액터모델에 맞지않은) 모두 액터로 변환하여 불필요하게 복잡성을

늘릴필요가 없을시 기존 비동기처리 코드를 재사용하여 파이프를 통해 액터와 유연하게 연동이 가능합니다.



Promice




  • No labels