首页 > 解决方案 > Akka.Net 中的 ContinueWith 异常不会重新启动

问题描述

我在 AKKA.NET 演员中有以下代码

        Receive<UploadFileFromDropboxMessage>(msg =>
        {
            var sender = Sender;
            var self = Self;
            UploadFromDropboxToBlobStorageAsync(msg.Path, msg.RelativeSourceRootDirectory).ContinueWith(o =>
            {
                if (o.Exception is null)
                {
                    sender.Tell(new UploadFileFromDropboxSuccessMessage(msg.Path), self);
                    sender.Tell(new ReadyForWorkMessage(), self);
                }
                else
                {
                    throw o.Exception;
                }
            }, TaskContinuationOptions.ExecuteSynchronously).PipeTo(Self);
        });

当在 ContinueWith 中重新抛出异常时,actor 不会重新启动。为什么不?

标签: akka.net

解决方案


ContinueWith正在执行作为Task演员之外的延续。异常将在执行该延续的任何线程上引发,而不是在参与者的范围内。

await如果您想在actor本身内部处理该异常,则在actor内部使用处理程序UploadFromDropboxToBlobStorageAsyncReceiveAsync<T>


推荐阅读