Исключение в ContinueWith в Akka. Net не перезапускается - PullRequest
2 голосов
/ 11 февраля 2020

У меня есть следующий код в 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);
        });

Когда исключение перебрасывается в Continue, когда актер не перезапускается. Почему бы нет?

1 Ответ

1 голос
/ 12 февраля 2020

ContinueWith выполняется как продолжение Task вне субъекта. Исключение будет выдано любому потоку, выполняющему это продолжение, а не в области действия субъекта.

await UploadFromDropboxToBlobStorageAsync внутри субъекта с использованием обработчика ReceiveAsync<T>, если вы хотите обработать это исключение внутри самого актера.

...