异步/等待和开发实践

时间:2016-06-02 21:16:43

标签: c# async-await

在我工作的公司中,我遇到了.NET / C#async / await功能的问题,该功能关于什么都不返回的方法(无效)。

项目指南认为应始终使用async / await,但IMO在某些情况下我需要使用void方法,并且async / await似乎无法正常使用这些方法。

例如,如果我采用命令/查询模式,表明导致状态更改的方法不应返回任何内容,则只返回查询(不更改状态)。

我有哪些选择?我不想放弃编程模式只是因为像async / wait这样的语言功能似乎不适用于void方法。

async / async x void方法最有问题的是在异步上下文中丢弃了异常。

1 个答案:

答案 0 :(得分:5)

返回int的方法的异步等效项是返回Task<int>的方法。返回void的方法的异步等效项是返回Task的方法。所以你应该让你的异步&#34;无效&#34;方法返回Task。容易腻!

  

例如,如果我采用命令/查询模式,要求导致状态更改的方法不应返回任何内容,则只需查询(不更改状态)返回值。

不确定。异步等效的是#34;导致异步状态更改的方法应返回Task,异步计算值的方法应返回Task<T>。&#34; Task 执行状态更改的任务,而Task<T> 是计算T值的任务

  

我不想放弃编程模式只是因为像async / wait这样的语言功能似乎无法使用void方法。

如果您想使用异步,那么您必须始终在您的设计模式中应用异步逻辑 。在同步代码中需要void的设计模式在异步代码中必须Task

  

项目指南认为应始终使用async / await,

我真诚地希望这些指导原则继续用于...所有可能需要超过30毫秒的所有IO或处理器绑定计算&#34;。无缘无故地使程序中的每个方法都异步听起来像是一团糟。异步是为了驯服延迟;如果您没有遇到延迟问题,那么不要使用