/// <summary> /// Gets or places an activation. /// </summary> public Task AddressMessage(Message message) { if (message.IsFullyAddressed) { return(Task.CompletedTask); } if (message.TargetGrain.IsDefault) { ThrowMissingAddress(); } var grainId = message.TargetGrain; if (_grainLocator.TryLookupInCache(grainId, out var result)) { SetMessageTargetPlacement(message, result.Activation, result.Silo); return(Task.CompletedTask); } var worker = _workers[grainId.GetUniformHashCode() % PlacementWorkerCount]; return(worker.AddressMessage(message));