获取错误:
错误CS4010:无法将异步lambda表达式转换为委托类型'Func'。异步lambda表达式可能会返回void,Task或Task,这些都不可转换为'Func
UIAccessibilityCustomAction someAccessibilityAction = new
UIAccessibilityCustomAction(
SwipeActionMarkTextValue("Accessibility Text", false),
async (UIAccessibilityCustomAction arg) =>{
await TestAsyncMethod();
return true;
});
private async Task<bool> TestAsyncMethod()
{
await Task.Delay(5000);
return true;
}
答案 0 :(得分:0)
请记住,异步是ContinueWith的(种类)语法糖。您的语法是完美的,但是如果我将其重写为以下内容,则可以帮助说明我的观点:
(UIAccessibilityCustomAction arg) => TestAsyncMethod().ContinueWith(b => true)
我对Xamarin.iOS并不熟悉,它还取决于您要完成的任务,但是下面是一些常规解决方案:
等待(阻止)您的工作项:
/*NO ASYNC HERE*/ (UIAccessibilityCustomAction arg) =>{
TestAsyncMethod().GetAwaiter().GetResult();
return true;
})
不过取决于您的情况this might cause a deadlock。
使您的工作人员“解雇”(异步作废),并在启动它后立即返回true。
UIAccessibilityCustomAction someAccessibilityAction = new UIAccessibilityCustomAction(
SwipeActionMarkTextValue("Accessibility Text", false),
(UIAccessibilityCustomAction arg) => {
TestAsyncMethod();
return true;
});
private async void TestAsyncMethod()
{
await Task.Delay(5000);
}