等待运算符不停止其他方法调用的继续
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
}
我有如下所示的三种方法
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
}