akka.net - 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 不会重新启动。为什么不?
解决方案
ContinueWith
正在执行作为Task
演员之外的延续。异常将在执行该延续的任何线程上引发,而不是在参与者的范围内。
await
如果您想在actor本身内部处理该异常,则在actor内部使用处理程序UploadFromDropboxToBlobStorageAsync
。ReceiveAsync<T>
推荐阅读
- reactjs - 在反应中撤消'npm run弹出'
- c# - 将 int16 打包成 fixed2(红+绿)
- c++ - 无法针对 Fedora 中的 mongo C++ 驱动程序进行编译
- bash - 如何在 Windows 中打开多个 git bash 终端并在 Windows 10 中自动执行相应的命令?
- grails - Grails - 唯一约束未按预期工作
- flutter - 如何构建一个可以垂直和水平滑动的列表视图
- android - Android Studio:在 native-lib.cpp 中包含 opencv2
- c# - 输入2个浮点数,转换为二进制,将它们相加并将结果作为c#中的浮点数输出
- mongodb - MongoDB $查找嵌套文档并根据需要准备结果
- python-3.x - 如何使用 PYQT5 使 QTableWidget 单元格只读?