异步/等待和开发实践

0 c# async-await

在我工作的公司里,我遇到了关于.NET/C#async/await功能的问题,关于没有返回任何内容的方法(void).

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

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

我有什么选择?我不想放弃编程模式只是因为某些语言功能如async/wait似乎无法使用void方法.

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

Eri*_*ert 5

返回int的方法的异步等价物是返回的方法Task<int>.返回void的方法的异步等价物是返回的方法Task.所以你应该让你的异步"void"方法返回Task.十分简单!

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

当然.异步等效的是"应该返回导致异步状态更改的Task方法,并且异步计算值的方法应该返回Task<T>." 的Task执行状态改变的任务,并且Task<T>计算T值的任务.

我不想放弃编程模式只是因为某些语言功能如async/wait似乎无法使用void方法.

如果要使用异步,则必须在设计模式中始终如一地应用异步逻辑.在同步代码中需要的设计模式必须在异步代码中使用.voidTask

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

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