在Akka.Net中,演员内部有一个不错的设计,可以使用Task.Run
启动任务并将结果通过管道传递给演员:
Task.Run(() => Method(...)).PipeTo(self);
注意,不涉及IO。
内部
Model Method(...)
有一些预处理,然后我必须等待对Task<Model>
的调用和一些后处理。
Task<Model>
在第三方库中,我无法更改。
我现在
var model = proxy.GetModel(..).Result
中的try catch
。
考虑了可能的AggregateException
。
另一个想法是将其与await
一起使用。
var model = await proxy.GetModel(..)
中的try catch
并将签名更改为
async Task<Model> Method(...)
我应该如何在actor中更改对Method的调用?
Task.Run(() => Method(...).Result).PipeTo(self);
Task.Run(async () => await Method(...)).PipeTo(self);
哪种方法更好,有什么区别?
答案 0 :(得分:2)
def custom404(request, exception=None):
response = {
'status_code': 404,
'error': 'The resource was not found'
}
return JsonResponse(response, status=404)
会阻塞线程并将所有异常包装在Result
中。由于这些原因,我通常更喜欢AggregateException
。
在这种情况下,您可以elide the async
/await
:
await