C# Xamarin是运行后台线程的最佳方式

C# Xamarin是运行后台线程的最佳方式,c#,xamarin,xamarin.forms,xamarin.android,xamarin.ios,C#,Xamarin,Xamarin.forms,Xamarin.android,Xamarin.ios,我有个问题。我正在开发一个收集股票市场价格的应用程序,但现在最重要的部分是我每x秒打一次电话获取新价格。price变量位于App.xaml.cs中,因此它对于每个页面都是全局的,但现在我需要每3秒钟用以下行更新它:CoinList=wait RestService.GetCoins() 函数必须是异步的,因为整个RestService是异步的 我已经找到了这样的东西: var minutes = TimeSpan.FromMinutes (3); Device.StartTimer (min

我有个问题。我正在开发一个收集股票市场价格的应用程序,但现在最重要的部分是我每x秒打一次电话获取新价格。price变量位于App.xaml.cs中,因此它对于每个页面都是全局的,但现在我需要每3秒钟用以下行更新它:
CoinList=wait RestService.GetCoins()

函数必须是异步的,因为整个RestService是异步的

我已经找到了这样的东西:

var minutes = TimeSpan.FromMinutes (3); 

Device.StartTimer (minutes, () => {

    // call your method to check for notifications here

    // Returning true means you want to repeat this timer
    return true;
});
但我不知道这是否是最好的方式,我应该把它放在哪里,因为它是我的应用程序最重要的部分


有什么建议吗?

只需将异步方法包装到一个
任务中。运行
,检查下面的代码

Device.StartTimer(TimeSpan.FromSeconds(3), () =>
{
  Task.Run(async () =>
  {
    CoinList = await RestService.GetCoins();
  });
  return true;
});

只需将异步方法包装到一个
任务中。运行
,检查下面的代码

Device.StartTimer(TimeSpan.FromSeconds(3), () =>
{
  Task.Run(async () =>
  {
    CoinList = await RestService.GetCoins();
  });
  return true;
});

在这种情况下,建议对未等待的
任务执行
async void
,因为不等待
任务。运行
任务会自动吞下异常:

Device.StartTimer(TimeSpan.FromSeconds(3), async () =>
{
  CoinList = await RestService.GetCoins();
  return true;
});

在这种情况下,建议对未等待的
任务执行
async void
,因为不等待
任务。运行
任务会自动吞下异常:

Device.StartTimer(TimeSpan.FromSeconds(3), async () =>
{
  CoinList = await RestService.GetCoins();
  return true;
});

那么,你正在寻找一个计时器,对吗?我想是的,我需要通过运行Task每隔3秒更新一个变量是的,上次我检查时(2年前),计时器功能非常有限。如果您的示例较新,则更适合通过以下方式使其异步:
Device.StartTimer(分钟,异步()=>{
Note2:这相当于
async void
,它有一些缺点。但这是最好的方法?所以,您正在寻找一个计时器,对吗?我想是的,我需要通过运行TaskYes每隔3秒更新一个变量,上次我检查时(2年前),计时器功能非常有限。如果您的示例较新,那么它更适合做注释您可以通过:
Device.StartTimer(分钟,async()=>{
Note2:它相当于
async void
,有一些缺点。但这是最好的方法吗?