在下面的代码中如何执行异步等待

时间:2019-07-24 05:35:23

标签: flutter dart

我需要澄清如何使用dart中的async和await和将来的API解决以下代码。

void main()    
{  
  print("Program starts");  
  printdart(1);  
  print("Program finishes");  
}  
printdart(int temp)  
{  
  int i;  
  for(i=temp;i<=1000;i++)  
  {  
    print("dart");  
      if(i%10==0)  
      {  
        printangular(i+1);  
        break;  
      }  
  }  
}  
printangular(int temp)  
{  
  int i;  
  for(i=temp;i<=1000;i++)  
  {  
    print("angular");  
    if(i%10==0)  
    {  
      printdart(i+1);  
      break;  
    }  
  }  
}  

如何在dart中实现异步和等待

2 个答案:

答案 0 :(得分:0)

我认为您需要研究更多Dart如何处理线程。我无法在这里解释所有内容,但是基本上Dart仅运行一个线程,因此您的所有代码都只会阻止该线程,异步操作将无济于事。

Dart还具有隔离程序,可以在多个线程中运行,但是由于它们非常隔离,因此传递和从中获取数据并不容易。

异步/等待最适合网络请求和文件访问,因为它们一旦激活便会阻塞,因此线程可以暂时忽略它们,并在有新值时返回那里。另一方面,您的代码不会阻塞,因此您无法等待它。

不过,有一种方法,您需要折射代码以使其产生值,然后可以异步等待它们。在这种情况下,您需要阅读有关异步生成器的信息,并查看它们如何工作,以便可以相应地重新格式化代码。

答案 1 :(得分:0)

在您提供的代码中,无需等待代码进行繁重的工作。

下面是代码的修改版本。在这里,代码将等待一段时间,然后再次调用。同时,其余代码将被执行。

import 'dart:async';

void main() {
  print("Program starts");
  printdart();
  printangular();
  print("Program finishes");
}

printdart() async {
  int i;
  for (i = 1; i <= 4; i++) {
    print("dart");
    await Future.delayed(const Duration(seconds: 2));
  }
}

printangular() async {
  int i;
  for (i = 1; i <= 4; i++) {
    print("angular");
    await Future.delayed(const Duration(seconds: 1));
  }
}

回答您的问题:

async:一个关键字,告诉编译器该函数将需要一些时间才能完成,但与此同时,请返回并运行程序的下一部分,并在完成此功能后返回。

await:这允许您等待过程完成,然后跳转到下一行。