我有一个Xamarin Android应用程序,我从Web服务获取数据,然后将其绑定到列表视图。Xamarin.Android:异步任务抛出未处理的异常
在MainActivity.cs的方法如下:
private async Task LoadDataFromService()
{
int userId = int.Parse(applicationData[USER_ID]); // Shared prefrenced data
//ASYNC Method getting data from JSON and converting it into Sales Object
Task<IList<Sales>> apiDataTask = UserData.GetSales(userId);
IList<Sales> apiData = await apiDataTask;
if (apiData != null)
{
salesList = apiData as List<Sales>;
dbManager.Update(salesList); //Sync with SQLite DB
}
}
在我MainActivity
我已经定义一个全局变量给这个任务的标识符
public class MainActivity : Activity
{
private Task loadData;
}
我打电话来此如下:
public class MainActivity : Activity
{
private Task loadData;
protected override void OnCreate(Bundle bundle)
{
loadData = new Task(async() => { await LoadDataFromService(); });
}
}
然后我必须等到数据下载然后我把数据放在ListView
。
protected override void OnStart()
{
base.OnStart();
loadData.Start(); // This is causing to generate an exception
loadData.ContinueWith(t => { BindData(); }).Wait();
}
唯一的问题我得到的是,它在unhanled异常的消息说An unhandled exception occured.
结束后,消息出现的OnStart已经解雇后没有任何迹象表明,以什么问题可能是。
感谢您的回答。事情是,我创建的应用程序是在线和离线工作。所以它会检查连通性并基于该异步方法被触发。出于这个原因,我不想让我的OnStart作为异步。如果我确实使它异步,它也会以同样的方式离线执行吗? – progrAmmar
@progrAmmar是的,这是没有问题的。您也可以使其脱机同步。异步只是通知编译器,本身不做任何事情。只要你的方法没有等待,它会执行同步,没有任何东西会运行异步。等待使该方法异步。因此,如果您的等待状态处于正常状态,您可以轻松地运行异步标记的同步方法。 – Sebi