Page History
...
C#의 비동기 프로그래밍의 힘을 빌려 Task에 완료된 비동기처리를 Pipe로 연결하여
결과가 완료되면, 완료 처리를 하게 합니다.
이러한 모델은, 어떠한 작업이 언제끝날지 모르는 외부장치에 의존이있을시(DB,RESTAPI)
연동시 활용될수 있습니다.
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
public class DelayReply
{
public string message;
}
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);
}
} |
...