Page History
...
| 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) //In:샘플은 String이지만, 어떠한 Request를 의미하는게 좋습니다
{
Task.Run(async () =>
{
await Task.Delay(1000); //어떠한 값을 기다림
DelayReply reply = new DelayReply();
reply.message = str;
return reply;
}).PipeTo(Self); //처리완료 결과가 파이프를 통해 DelayReply 처리기로 넘깁니다.
}
public void Handle(DelayReply data) //Out:어떠한 Result/Response임을 명시하는게 좋습니다.
{
string logtrace = string.Format("I'am {0} RE:{1}", Self.Path, data.message);
log.Info(data.message);
Sender.Tell(data);
}
} |
| Code Block | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
var tasks = new List<Task>();
tasks.Add(actorA.Ask("request", TimeSpan.FromSeconds(1)));
tasks.Add(actorB.Ask("another request", TimeSpan.FromSeconds(5)));
Task.WhenAll(tasks).PipeTo(actorC, Self); |