Ваш асинхронный метод не возвращает bool. Возвращает задание .
Помните, что async является (своего рода) синтаксическим сахаром для ContinueWith. Ваш синтаксис идеален, но он помогает проиллюстрировать мою точку зрения, если я переписываю его так:
(UIAccessibilityCustomAction arg) => TestAsyncMethod().ContinueWith(b => true)
Возможные решения
Я не знаком с Xamarin.iOS, и это также зависит от задачи, которую вы хотите достичь, но вот несколько общих решений:
- Используйте API, который принимает асинхронный обратный вызов, если он есть.
- Сделайте свою работу синхронной.
Ожидание (блокировка) вашего рабочего элемента:
/*NO ASYNC HERE*/ (UIAccessibilityCustomAction arg) =>{
TestAsyncMethod().GetAwaiter().GetResult();
return true;
})
В зависимости от вашей ситуации это может привести к тупику .
Сделайте так, чтобы ваш работник "выстрелил и забыл" (async void) и сразу же вернул true после того, как его сбросили.
UIAccessibilityCustomAction someAccessibilityAction = new UIAccessibilityCustomAction(
SwipeActionMarkTextValue("Accessibility Text", false),
(UIAccessibilityCustomAction arg) => {
TestAsyncMethod();
return true;
});
private async void TestAsyncMethod()
{
await Task.Delay(5000);
}