我有三种方法,如下所示
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
}
有关如何使其发挥作用的任何建议吗?
答案 0 :(得分:4)
要根据其他两种方法的完成情况获得第三种方法,请使用WhenAll
类的Task
方法。
var t1 = CheckPhotoLibraryAccess();
var t2 = CheckDeviceAuthorization();
await Task.WhenAll(t1, t2).ContinueWith(t => DisplayAppBar());
答案 1 :(得分:1)
@Yacoub Massad和@SLaks提醒我,为了等待处理方法调用,该方法需要包含一个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
}