异步编程中async Task
与async void
的返回值选择
在异步编程中使用async
和await
很常见,但选择public async Task AsyncMethod(int num)
还是public async void AsyncMethod(int num)
作为方法的返回类型却常常令人困惑。
返回Task
一般情况下,返回Task
是首选。它允许调用者跟踪异步操作的进度并等待其完成。当任务表示可能需要大量时间的长时间运行操作时,这非常有用。
返回void
返回void
通常用于异步操作不需要报告其进度或调用者不需要等待其完成的情况。一个合适的场景是处理事件,因为事件处理程序通常不返回值。
非必要关键字
在某些情况下,async
和await
可能并非必需。例如,如果您的方法只执行单个异步操作并且不需要跟踪其进度,您可以使用以下语法:
public static void AsyncMethod2(int num) { Task.Factory.StartNew(() => Thread.Sleep(num)); }
但是,在这种情况下仍然建议使用async
和await
,因为它们确保了异常的正确处理,尤其是在异步操作抛出调用者未处理的异常时。
其他注意事项
async void
方法被认为是“顶级”异步操作,并且在异常处理方面有特殊规则。async
方法抛出异常,调用者并不总是能观察到。async
和await
确保在顶级和非顶级异步方法中都能正确处理异常。以上是异步任务vs.异步void:何时应该返回任务?的详细内容。更多信息请关注PHP中文网其他相关文章!