diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.Core.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.Core.verified.txt index 43eb962ca27..2a12f0b3c4b 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.Core.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.Core.verified.txt @@ -888,11 +888,12 @@ namespace Akka.Actor public Failures() { } public System.Collections.Generic.List Entries { get; } } - public sealed class FutureActorRef : Akka.Actor.MinimalActorRef + public class FutureActorRef : Akka.Actor.MinimalActorRef { public FutureActorRef(System.Threading.Tasks.TaskCompletionSource result, Akka.Actor.ActorPath path, Akka.Actor.IActorRefProvider provider) { } public override Akka.Actor.ActorPath Path { get; } public override Akka.Actor.IActorRefProvider Provider { get; } + public virtual void DeliverAsk(object message, Akka.Actor.ICanTell destination) { } protected override void TellInternal(object message, Akka.Actor.IActorRef sender) { } } public class static Futures diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.DotNet.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.DotNet.verified.txt index d3eb1bb8107..204955e9d2c 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.DotNet.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.DotNet.verified.txt @@ -890,11 +890,12 @@ namespace Akka.Actor public Failures() { } public System.Collections.Generic.List Entries { get; } } - public sealed class FutureActorRef : Akka.Actor.MinimalActorRef + public class FutureActorRef : Akka.Actor.MinimalActorRef { public FutureActorRef(System.Threading.Tasks.TaskCompletionSource result, Akka.Actor.ActorPath path, Akka.Actor.IActorRefProvider provider) { } public override Akka.Actor.ActorPath Path { get; } public override Akka.Actor.IActorRefProvider Provider { get; } + public virtual void DeliverAsk(object message, Akka.Actor.ICanTell destination) { } protected override void TellInternal(object message, Akka.Actor.IActorRef sender) { } } public class static Futures diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.Net.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.Net.verified.txt index 43eb962ca27..2a12f0b3c4b 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.Net.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.Net.verified.txt @@ -888,11 +888,12 @@ namespace Akka.Actor public Failures() { } public System.Collections.Generic.List Entries { get; } } - public sealed class FutureActorRef : Akka.Actor.MinimalActorRef + public class FutureActorRef : Akka.Actor.MinimalActorRef { public FutureActorRef(System.Threading.Tasks.TaskCompletionSource result, Akka.Actor.ActorPath path, Akka.Actor.IActorRefProvider provider) { } public override Akka.Actor.ActorPath Path { get; } public override Akka.Actor.IActorRefProvider Provider { get; } + public virtual void DeliverAsk(object message, Akka.Actor.ICanTell destination) { } protected override void TellInternal(object message, Akka.Actor.IActorRef sender) { } } public class static Futures diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.verified.txt index 0d9c780778b..280340c6f21 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.verified.txt @@ -885,11 +885,12 @@ namespace Akka.Actor public Failures() { } public System.Collections.Generic.List Entries { get; } } - public sealed class FutureActorRef : Akka.Actor.MinimalActorRef + public class FutureActorRef : Akka.Actor.MinimalActorRef { public FutureActorRef(System.Threading.Tasks.TaskCompletionSource result, Akka.Actor.ActorPath path, Akka.Actor.IActorRefProvider provider) { } public override Akka.Actor.ActorPath Path { get; } public override Akka.Actor.IActorRefProvider Provider { get; } + public virtual void DeliverAsk(object message, Akka.Actor.ICanTell destination) { } protected override void TellInternal(object message, Akka.Actor.IActorRef sender) { } } public class static Futures diff --git a/src/core/Akka/Actor/ActorRef.cs b/src/core/Akka/Actor/ActorRef.cs index a03abaecdd8..62ee09f2e94 100644 --- a/src/core/Akka/Actor/ActorRef.cs +++ b/src/core/Akka/Actor/ActorRef.cs @@ -69,7 +69,7 @@ public interface IRepointableRef : IActorRefScope /// /// ActorRef implementation used for one-off tasks. /// - public sealed class FutureActorRef : MinimalActorRef + public class FutureActorRef : MinimalActorRef { private readonly TaskCompletionSource _result; private readonly ActorPath _path; @@ -122,9 +122,12 @@ protected override void TellInternal(object message, IActorRef sender) handled = _result.TrySetException(f.Cause ?? new TaskCanceledException("Task cancelled by actor via Failure message.")); break; +#pragma warning disable CS0618 + // for backwards compatibility case Failure f: handled = _result.TrySetException(f.Exception - ?? new TaskCanceledException("Task cancelled by actor via Failure message.")); + ?? new TaskCanceledException("Task cancelled by actor via Failure message.")); +#pragma warning restore CS0618 break; default: _ = _result.TrySetException(new ArgumentException( @@ -136,6 +139,10 @@ protected override void TellInternal(object message, IActorRef sender) if (!handled && !_result.Task.IsCanceled) _provider.DeadLetters.Tell(message ?? default(T), this); } + + public virtual void DeliverAsk(object message, ICanTell destination){ + destination.Tell(message, this); + } } diff --git a/src/core/Akka/Actor/Futures.cs b/src/core/Akka/Actor/Futures.cs index fdfe471babd..5901088d19a 100644 --- a/src/core/Akka/Actor/Futures.cs +++ b/src/core/Akka/Actor/Futures.cs @@ -164,7 +164,7 @@ public static Task Ask(this ICanTell self, Func message //The future actor needs to be registered in the temp container provider.RegisterTempActor(future, path); var message = messageFactory(future); - self.Tell(message, future); + future.DeliverAsk(message, self); return result.Task; }