Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#异步void方法(异步方法';.';不应返回void)_C#_Asynchronous_Async Await_Void - Fatal编程技术网

C#异步void方法(异步方法';.';不应返回void)

C#异步void方法(异步方法';.';不应返回void),c#,asynchronous,async-await,void,C#,Asynchronous,Async Await,Void,我正在用Xamarin编写一个iOS/Android应用程序。有时,我想在共享层中调用异步方法。 有时我调用一个方法而不等待它,以便可以调用其他方法。例如,应更新数据库中的值时(共享层处理读/写冲突)。我不在乎方法调用何时完成,因此我将方法声明为async void。Visual Studio现在显示一条警告“异步方法“…”不应返回void”。我确切地知道不应该等待该方法,那么为什么该方法在那个时候不应该返回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。