[英]Cannot convert async lambda expression to delegate type 'Func<bool, string, bool>'
[英]Cannot convert async lambda expression to delegate type 'Func<UIAccessibilityCustomAction, bool>
出现错误:
错误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;
}
请记住,异步是ContinueWith的(种类)语法糖。 您的语法是完美的,但是如果我将其重写为:
(UIAccessibilityCustomAction arg) => TestAsyncMethod().ContinueWith(b => true)
我对Xamarin.iOS并不熟悉,它还取决于您要实现的任务,但以下是一些常规解决方案:
等待(阻止)您的工作项:
/*NO ASYNC HERE*/ (UIAccessibilityCustomAction arg) =>{ TestAsyncMethod().GetAwaiter().GetResult(); return true; })
但是,根据您的情况, 这可能会导致死锁 。
让您的工作人员“失火忘却”(异步作废),并在启动工作后立即返回true。
UIAccessibilityCustomAction someAccessibilityAction = new UIAccessibilityCustomAction( SwipeActionMarkTextValue("Accessibility Text", false), (UIAccessibilityCustomAction arg) => { TestAsyncMethod(); return true; }); private async void TestAsyncMethod() { await Task.Delay(5000); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.