C#异步void方法(异步方法';.';不应返回void)
我正在用Xamarin编写一个iOS/Android应用程序。有时,我想在共享层中调用异步方法。 有时我调用一个方法而不等待它,以便可以调用其他方法。例如,应更新数据库中的值时(共享层处理读/写冲突)。我不在乎方法调用何时完成,因此我将方法声明为async void。Visual Studio现在显示一条警告“异步方法“…”不应返回void”。我确切地知道不应该等待该方法,那么为什么该方法在那个时候不应该返回void呢? 如果我将返回类型改为任务,我会得到警告,考虑使用等待我不想调用的方法调用。C#异步void方法(异步方法';.';不应返回void),c#,asynchronous,async-await,void,C#,Asynchronous,Async Await,Void,我正在用Xamarin编写一个iOS/Android应用程序。有时,我想在共享层中调用异步方法。 有时我调用一个方法而不等待它,以便可以调用其他方法。例如,应更新数据库中的值时(共享层处理读/写冲突)。我不在乎方法调用何时完成,因此我将方法声明为async void。Visual Studio现在显示一条警告“异步方法“…”不应返回void”。我确切地知道不应该等待该方法,那么为什么该方法在那个时候不应该返回void呢? 如果我将返回类型改为任务,我会得到警告,考虑使用等待我不想调用的方法调用。
另一个示例是从数据库检索数据,并在数据可用时更新UI。这一次,我等待对共享层的方法调用,但是在UI类的异步void方法中。我希望在检索数据时继续执行,那么为什么使用异步void方法不好呢?您确定不想等待您的读写操作吗?这意味着您无法捕获异常。Async void不好,因为您无法等待它(因此无法处理来自它的异常)。如果您创建这样的方法,请确保方法本身处理所有可能的异常(具有有意义处理的顶级try-catch块)。不等待async方法有时是合适的(尤其是当您稍后处理返回的任务时)。可能重复的UI示例,请查看(也是由本文中第一条注释的作者编写的!)您可以让notify类保存正在运行的任务,并且可以绑定到notify对象,它具有诸如IsRunning之类的有用属性。异常完全在搜索层中处理。在某些情况下,我必须使方法async无效。例如,当我覆盖“ViewDidLoad”时,如果我想等待任务,我只能使用async void。