public static async Task <PID> GetAsync(string name, string kind, CancellationToken ct) { var req = new PidCacheRequest(name, kind); var res = await PidCache.Pid.RequestAsync <ActorPidResponse>(req, ct); return(res.Pid); }
public static async Task <(PID, ResponseStatusCode)> GetAsync(string name, string kind, CancellationToken ct) { var req = new PidCacheRequest(name, kind); var resp = await PidCache.Pid.RequestAsync <PidCacheResponse>(req, ct); return(resp.Pid, resp.StatusCode); }
private void GetPid(IContext context, PidCacheRequest msg) { if (_cache.TryGetValue(msg.Name, out var pid)) { context.Respond(new ActorPidResponse { Pid = pid }); return; //found the pid, replied, exit } var name = msg.Name; var kind = msg.Kind; context.ReenterAfter(MemberList.GetMemberAsync(name, kind), address => { var remotePid = Partition.PartitionForKind(address.Result, kind); var req = new ActorPidRequest { Kind = kind, Name = name }; var resp = remotePid.RequestAsync <ActorPidResponse>(req); context.ReenterAfter(resp, t => { var res = t.Result; var respid = res.Pid; var key = respid.ToShortString(); _cache[name] = respid; _reverseCache[key] = name; context.Watch(respid); context.Respond(res); return(Actor.Done); }); return(Actor.Done); }); }