C# 在Task.Run中使用'Result'的有效性如何`
在Akka.Net中,参与者内部有一个很好的设计,即使用C# 在Task.Run中使用'Result'的有效性如何`,c#,async-await,akka.net,C#,Async Await,Akka.net,在Akka.Net中,参与者内部有一个很好的设计,即使用task.Run启动任务,并将结果反馈给参与者: Task.Run(() => Method(...)).PipeTo(self); 注意,不涉及IO。 内部 模型方法(…) 有一点预处理,然后我必须等待对任务的调用和一点后处理。 任务位于第三方库中,我无法更改。 目前我有 var model=proxy.GetModel(..).Result在一个try catch中 考虑了可能的聚合异常 另一个想法是将其与wait一起使用 va
task.Run
启动任务,并将结果反馈给参与者:
Task.Run(() => Method(...)).PipeTo(self);
注意,不涉及IO。内部
模型方法(…)
有一点预处理,然后我必须等待对
任务的调用和一点后处理。
任务
位于第三方库中,我无法更改。
目前我有
var model=proxy.GetModel(..).Result
在一个try catch中
考虑了可能的聚合异常
另一个想法是将其与wait
一起使用
var model=await proxy.GetModel(..)
在一个try catch中
并将签名更改为
异步任务方法(…)
我应该如何更改actor中对方法的调用
Task.Run(() => Method(...).Result).PipeTo(self);
Task.Run(async () => await Method(...)).PipeTo(self);
哪种方法更好,有什么区别?Result
阻塞线程并将任何异常包装在聚合异常中。出于这些原因,我通常更喜欢wait
在这种情况下,您可以:
如果没有async Wait关键字,我将不得不使用方法(..)中任务的结果
,
,因为我的代码有点简化,而方法(..)中的后处理
使用结果-尽管我可以重构它。@杰拉德:不。你可以使用方法使用异步/等待很好,使用任务的任一形式。运行。
// Same as:
// Task.Run(async () => await Method(...)).PipeTo(self);
Task.Run(() => Method(...)).PipeTo(self);