Page History
Info |
---|
Future(미래)와 Promice(약속)은 비동기처리에 있어서 중요한 개념입니다. 미래에는 블록킹이 없기때문에 어느시점 사용가능 해지는 함수의 결과(성공또는 실패등을) 를 담을수 있는 용기라고 보면 됩니다. Scala에서는 이러한 기능을 위해 동일한 키워드를 지원하며 일반적으로 결과에대한 비동기적인 핸들이라고 이해하시면 되겠으며 C#/JAVA에서도 유사하게 활용이 가능합니다. 관련 참고 원문: 이러한 컨셉은 Java(8)/.net(4.5)의 경우 최신 버젼에서 지원하는것으로 보아 scala에서 영향을 준것으로 보입니다.
|
...
Future
draw.io Diagram | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
.net 에서 Actor 메시지와 비동기처리(Task)를 연동한 샘픞
Code Block | ||||
---|---|---|---|---|
| ||||
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);
}
} |
이것은 기존에 가진 모듈을(액터모델에 맞지않은) 모두 액터로 변환하여 불필요하게 복잡성을
늘릴필요가 없을시 기존 비동기처리 코드를 재사용하여 파이프를 통해 액터와 유연하게 연동이 가능합니다.