我有以下实现,并在Async Task<bool>
方法中添加了ChangeDate()
操作,之前它只是bool
。
在以下行if (!ChangeDate())
操作员!不能应用于类型的操作数 任务
public DateTime Date
{
get { return _date; }
set
{
if (!ChangeDate())
{
return;
}
_date = value.Date;
}
}
private async Task<bool> ChangeDate()
{
if (IsSave)
{
await Mvx.Resolve<IUserDialogs>().ConfirmAsync(new ConfirmConfig
{
Message = "Are you sure ?",
OnConfirm = b =>
{
if (b)
{
Save();
}
}
});
}
return true;
}
答案 0 :(得分:2)
也许你想要这样的东西......?
public DateTime Date { get; private set; }
public Task SetDateIfUserConfirmsAsync( DateTime proposedDate)
{
var confirmConfig = new ConfirmConfig() {
Message = "Are you sure ?",
OnConfirm = b => { if (b) { this.Date = proposedDate; } }
}
await Mvx.Resolve<IUserDialogs>().ConfirmAsync( confirmConfig);
}
您还没有说过您正在使用的UI,但可能您处于按钮回调中,该回调具有同步签名(void return)。在这种情况下,您希望确保捕获任何异常,否则您将永远不会看到它们(异常不会传播回异步void方法的调用方)。有点像这样:
public async void OnButtonClick()
{
try {
DateTime proposedDate = ...;
await SetDateIfUserConfirmsAsync( proposedDate)
} catch (Exception e) {
// display or log the exception
}
}
P.S。在您看到的错误上,&#34;运营商!不能应用于任务&lt; bool&gt;&#34;类型的操作数,这是因为您没有等待任务。如果t的类型为Task&lt; bool&gt;那么&#34;等待t&#34;有类型bool。
答案 1 :(得分:0)
找到了这个答案:How to make an Asynchronous Method return a value?
你需要制作一个异步帮助方法,并调用它而不是只调用你的setter,因为正如@Ron Beyer指出的那样,await调用在属性中不起作用。
替换:
if(!ChangeDate())
使用:
if( !(await ChangeDate()) )