等待运算符不停止其他方法调用的继续

await operator not stopping continuation of other method calls

我有如下所示的三种方法

private async Task checkPhotoLibraryAccess()
{
    PHPhotoLibrary.RequestAuthorization(status =>
    {
        switch (status)
        {
            //stuff here
        }
    }

}

private async Task checkDeviceAuthorizationStatus()
{
    var status = AVCaptureDevice.GetAuthorizationStatus(AVMediaType.Video);
    switch (status)
    {
        //stuff here
    }
}

private void displayAppBar()
{
     AppBar.IsVisible = true;
}

我想在调用第三个方法之前完成前两个方法的执行。我研究了这个问题,并找到了使用 await 运算符和 Wait() 方法的方法。但是我的实施没有奏效。下面是我的代码。

尝试 1

private async void MyMethod() 
{
    await checkPhotoLibraryAccess();
    await checkDeviceAuthorizationStatus();
    displayAppBar(); //THIS IS CALLED BEFORE COMPLETION OF TWO ABOVE
}

尝试 2

private async void MyMethod()
{
    checkPhotoLibraryAccess().Wait();
    checkDeviceAuthorizationStatus().Wait();
    displayAppBar(); //SAME ISSUE
}

关于如何让它工作有什么建议吗?

要根据其他两个方法的完成执行第三个方法,您可以使用 Task class.

WhenAll 方法
var t1 = CheckPhotoLibraryAccess();
var t2 = CheckDeviceAuthorization();

await Task.WhenAll(t1, t2).ContinueWith(t => DisplayAppBar());

@Yacoub Massad 和@SLaks 提醒我,为了让 await 在方法调用上工作,该方法需要包含一个 await 运算符。

所以我更改了我的 PhotoLibraryAccess 方法以包含 await 运算符并将其方法调用放在 DisplayAppBar 调用之前。

private async Task checkPhotoLibraryAccess()
{
    var status = await PHPhotoLibrary.RequestAuthorizationAsync(); 
    //stuff here
}

然后...

private async void MyMethod()
{
     checkDeviceAuthorizationStatus(); //Removed async Task stuff
     await checkPhotoLibraryAccess();
     displayButtons(); //IT WORKS
}