gpt4 book ai didi

c# - UITextField.ShouldReturn : how to use async method?

转载 作者:行者123 更新时间:2023-11-29 12:56:15 25 4
gpt4 key购买 nike

我一直盯着这段代码,但不知道如何正确修复它。我有一个 UITextField。如果按下 RETURN,它应该执行一个 async 方法。下面的代码给了我一个编译器警告,我应该考虑使用 await HandleNextStep()。不能那样做,因为 ShouldReturn 不是异步的:

delegate bool UITextFieldCondition(UITextField textField);

我可以解决这个问题吗?我应该修理它吗? ShouldReturn()HandleNextStep() 完成之前立即返回是否重要?

this.txt.ShouldReturn = textField =>
{
this.HandleNextStep();
return true;
};

最佳答案

也不是 Monotouch 开发人员,但我假设您可以忽略此警告,除非您真的有兴趣观察 HandleNextStep() 异步调用返回的任务的完成情况。

以下将抑制 VS 2012 中的警告:

this.txt.ShouldReturn = textField =>
{
var task = this.HandleNextStep(); // presumably, no more warning
return true;
};

如果你真的喜欢观察任务的状态,你可以这样做(不再警告):

Task _handleNextStepTask; // a member variable

// ...

this.txt.ShouldReturn = textField =>
{
this._handleNextStepTask = this.HandleNextStep().ContinueWith(
t => Debug.Print("NextStepHandled"),
TaskScheduler.FromCurrentSynchronizationContext());
return true;
};

或者甚至像下面这样的东西,如果你真的不想在任何地方存储 Task 对象,仍然没有更多警告:

this.txt.ShouldReturn = textField =>
{
(new Action(async () =>
{
try
{
await this.HandleNextStep();
// executed synchronously until this point
Debug.Print("NextStepHandled");
}
catch (Exception ex)
{
// catch all exceptions inside "async void" lambda
Debug.Print(ex.Message);
}
}))();

return true;
};

后一种方法可能被视为 code smell ,但我认为在这种特定情况下可以使用它。

关于c# - UITextField.ShouldReturn : how to use async method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21006215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com