2
這是我在Dart的第一個程序,我只是想看看它是異步功能。知道的JavaScript我寫以下代碼:鏢計時器出錯了?
import 'dart:async' show Timer;
import 'dart:math';
void main() {
//Recursion
fib1(x) => x > 1 ? fib1(x-1) + fib1(x-2) : x;
//Mathematical
num fi = (1 + sqrt(5))/2;
fib2(x) => x > 1 ? ((pow(fi, x) + pow(1 - fi, x))/sqrt(5)).round() : x;
//Linear
fib3(x) {
if(x < 2) return x;
int a1 = 0;
int a2 = 1;
int sum = 0;
for(int i = 1; i < x; i++) {
sum = a2 + a1;
a1 = a2;
a2 = sum;
}
return sum;
}
Timer.run(() => print('Fib1:' + fib1(41).toString()));
Timer.run(() => print('Fib2:' + fib2(41).toString()));
Timer.run(() => print('Fib3:' + fib3(41).toString()));
}
並在鏢編輯器輸出是:
Fib1:165580141
Fib2:165580141
Fib3:165580141
全部3輸出被同時打印。這不是錯的嗎? fib3要快得多,應該首先打印。
緩慢
Fib1
我不認爲異步必然是多線程的,我在NodeJS中也有單線程異步I/O程序。而且我知道更快的計劃首先結束。 Fib3比fib2和fib1快了許多,它仍然等待它們完成,然後所有的打印都會一個一個地同步執行,這很奇怪。 –感謝您澄清您的問題。 –
是的,我認爲某種使用緩衝輸出的順序執行,但是它們在文檔上告訴你的東西很奇怪。我認爲'Timer.run'相當於javascript的'setTimeout(callback,0)' –