Dart 如何捕获计时器函数调用中抛出的错误?

Dart 如何捕获计时器函数调用中抛出的错误?,dart,Dart,我的代码类似于: timer = new Timer(new Duration(milliseconds: 1000), () => (throw new TimeoutException('Callback not invoked!'))); while (timer.isActive){ await new Future.delayed(const Duration(milliseconds: 1), () => "1"); } print('this

我的代码类似于:

  timer = new Timer(new Duration(milliseconds: 1000), () => (throw new TimeoutException('Callback not invoked!')));

  while (timer.isActive){
    await new  Future.delayed(const Duration(milliseconds: 1), () => "1");
  }
  print('this should not be reached if the exception is raised');
在其他地方,我有一个异步回调,它调用:

timer.cancel();
在调用回调的情况下,它可以正常工作,因为回调会取消计时器

但是,如果没有取消,我不确定在这种情况下如何捕获
TimeoutException
,因为异常似乎是在与我的主函数不同的范围内引发的。这意味着即使

有没有办法进行某种尝试/捕获或以某种方式处理上述超时异常?或者一个更好的方法来做我想做的事情


使用dart 1.19.1.

根据超时是
500ms
还是
1500ms
,您会得到不同的行为:

   final timer = new Future.delayed(const Duration(milliseconds: 1000), 
         () => (throw new Exception('Callback not invoked!')))
     .timeout(const Duration(milliseconds: 500));
   try {
     await timer;
   } on TimeoutException catch(e) {
     print('this should not be reached if the exception is raised');
   } on Exception catch(e) {
     print('exception: $e');
   } 

您确定需要
计时器吗?使用
Future.delayed().timeout…
?@GünterZöchbauer如果这是一个更好的选择,我非常愿意使用它。我最初使用计时器是因为我实际上可以跟踪整个回调所需的时间,但无法使用基于未来的操作。我如何在其他回调中取消未来的计时器?以前我只能
timer.cancel()
这是有效的,但我不清楚在另一个回调发生超时之前如何解决未来问题?我明白了。我没想到。我认为没有办法取消一个
未来的
。另见,