我有一个异步方法从磁盘加载数据(使用Json)。
但是,当我在StartupPage()或OnNavigatedTo()中运行该方法时,我不能使用await运算符,因为这些不是异步方法。代码仍将运行,但我收到警告,表示它尚未等待。
在启动/导航到运行异步方法有什么好方法吗?
答案 0 :(得分:2)
您需要在async
上使用OnNavigatedTo()
以避免警告..
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
try
{
if (!App.ViewModel.IsDataLoaded)
{
await App.ViewModel.LoadData();
}
}
catch (Exception ex)
{
...
}
}
答案 1 :(得分:1)
在初始化时启动异步方法是可以的,但是必须确保异步调用不会破坏初始化工作流。
#pragma或ContinueWith调用可以抑制有关未等待异步方法调用的警告。我更喜欢最后一个来抑制此警告,请调查以下扩展方法的代码。
public static void LogAsyncError(this Task task, [LocalizationRequired(false)] string message = null)
{
if (task == null)
{
return;
}
task.ContinueWith(t =>
{
var log = Logger.Create("Task error logger");
if (string.IsNullOrEmpty(message))
{
log.Error(t.Exception);
}
else
{
log.Error(message, t.Exception);
}
}, TaskContinuationOptions.OnlyOnFaulted);
}
现在,您可以在没有警告和错误记录的情况下调用异步方法。
SomeMethodAsync().LogAsyncError();