在`Task.Run`

时间:2019-05-11 13:23:13

标签: c# async-await akka.net

在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);

哪种方法更好,有什么区别?

1 个答案:

答案 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