C# 异步/等待和开发实践
在我工作的公司里,我面临着.NET/C#async/await特性的问题,该特性涉及不返回任何内容的方法(void)C# 异步/等待和开发实践,c#,async-await,C#,Async Await,在我工作的公司里,我面临着.NET/C#async/await特性的问题,该特性涉及不返回任何内容的方法(void) 项目指南认为应该始终使用async/await,但在某些情况下,我需要使用void方法,而async/await似乎不能与此类方法一起正常工作 例如,如果我采用命令/查询模式,即导致状态更改的方法不应返回任何内容,则返回的只是查询(不更改状态) 我有什么选择?我不想因为async/wait之类的语言特性似乎不能与void方法一起使用而放弃编程模式 async/async x vo
项目指南认为应该始终使用async/await,但在某些情况下,我需要使用void方法,而async/await似乎不能与此类方法一起正常工作 例如,如果我采用命令/查询模式,即导致状态更改的方法不应返回任何内容,则返回的只是查询(不更改状态) 我有什么选择?我不想因为async/wait之类的语言特性似乎不能与void方法一起使用而放弃编程模式
async/async x void方法最有问题的地方是在异步上下文中丢弃异常。异步等价于返回
int
的方法是返回Task
的方法。返回void
的方法的异步等价物是返回Task
的方法。因此,您应该使异步“void”方法返回Task
。轻松点
例如,如果我采用命令/查询模式,要求导致状态更改的方法不应返回任何内容,则只需查询(不更改状态)返回值
当然。异步等价物是“导致异步状态更改的方法应返回任务
,异步计算值的方法应返回任务
”任务
是执行状态更改的任务,任务
是计算T值的任务
我不想因为async/wait之类的语言特性似乎不能与void方法一起使用而放弃编程模式
如果您想使用异步,那么必须在设计模式中一致地应用异步逻辑。在同步代码中需要void
的设计模式在异步代码中必须需要Task
项目指南规定应始终使用async/await
我真诚地希望这些指导方针继续下去“……对于所有可能需要30毫秒以上的IO或处理器限制计算”。无缘无故地使程序中的每个方法都异步听起来像是一团糟。异步是用来控制延迟的;如果延迟没有问题,就不要使用它。异步等效于返回
int
的方法是返回Task
的方法。返回void
的方法的异步等价物是返回Task
的方法。因此,您应该使异步“void”方法返回Task
。轻松点
例如,如果我采用命令/查询模式,要求导致状态更改的方法不应返回任何内容,则只需查询(不更改状态)返回值
当然。异步等价物是“导致异步状态更改的方法应返回任务
,异步计算值的方法应返回任务
”任务
是执行状态更改的任务,任务
是计算T值的任务
我不想因为async/wait之类的语言特性似乎不能与void方法一起使用而放弃编程模式
如果您想使用异步,那么必须在设计模式中一致地应用异步逻辑。在同步代码中需要void
的设计模式在异步代码中必须需要Task
项目指南规定应始终使用async/await
我真诚地希望这些指导方针继续下去“……对于所有可能需要30毫秒以上的IO或处理器限制计算”。无缘无故地使程序中的每个方法都异步听起来像是一团糟。异步是用来控制延迟的;如果您没有延迟问题,请不要使用它。如果必须使用void,请使用void。“async\await不能与void方法一起工作”这一说法并不完全正确。这里也可以看到:“项目指导原则主张应始终使用async/await”这让我认为,无论是谁设计了这些指导原则,都对c#编程一无所知。您需要了解async/await是如何工作的,以了解您的问题。阅读MSDN:如果只返回任务而不返回内部的类型结果如何?这与void完全相同,但它是使用异步编程与C#是的,它是一个dup真的,顺便说一句,感谢所有的答案!!!你们都帮了我大忙!如果必须使用void,请使用void。“async\await不能与void方法一起工作”这一说法并不完全正确。这里也可以看到:“项目指导原则主张应始终使用async/await”这让我认为,无论是谁设计了这些指导原则,都对c#编程一无所知。您需要了解async/await是如何工作的,以了解您的问题。阅读MSDN:如果只返回任务而不返回内部的类型结果如何?这与void完全相同,但它是使用异步编程与C#是的,它是一个dup真的,顺便说一句,感谢所有的答案!!!你们都帮了我大忙!