我想我明白背後異步的想法,返回一個未來,但我不是不清楚如何異步的行爲在一個非常基本的水平。根據我的理解,它不會在程序中自動創建異步行爲。例如:如何實現異步/地等待着飛鏢
import 'dart:async';
main() {
a();
b();
}
a() {
new Timer(new Duration(milliseconds: 20),() {}); // create latency
print("a");
}
b() {
print("b");
}
// a
// b
如果你把異步後的一個(),則B()被執行第一異步和()給定的延遲後執行:
import 'dart:async';
main() {
a();
b();
}
a() **async** {
new Timer(new Duration(milliseconds: 20),() {}); // create latency
print("a");
}
b() {
print("b");
}
// b
// a
但如果你把異步在a()和b()之後,A()執行第一,類似於不使用異步可言:
import 'dart:async';
main() {
a();
b();
}
a() **async** {
new Timer(new Duration(milliseconds: 20),() {}); // create latency
print("a");
}
b() **async** {
print("b");
}
//a
//b
正在使用異步對所有功能完全取消異步函數?
現在,我認爲主要()異步實際上並沒有自己激活異步行爲。如果在main()之後添加async,則沒有任何更改。但是,它允許您使用等待,以防萬一在繼續執行程序之前必須先等待a()函數完成。這是正確的嗎?
import 'dart:async';
main() **async** {
**await** a();
b();
}
a() **async** {
new Timer(new Duration(milliseconds: 20),() {}); // create latency
print("a");
}
b() {
print("b");
}
// waits for the value of a() if you put **await** keyword
// a
// b
但是,我看到的main()異步 {}很多以及腳本的HTML標籤之後使用它,但沒有等待任何地方。這是否意味着在不同情況下的不同事物?我希望我已經充分解釋了邏輯。你能解釋我是如何誤解async/await的使用嗎?謝謝。
謝謝。我並不知道我並沒有真正創建延遲。但是,以您的示例爲例,唯一的區別是,如果您在a()和b()之前放置了異步,則首先獲得打印的b,然後是a。我認爲我的問題可能過於寬泛,所以讓我將其細化爲一個特例。爲什麼main()async {},當main()永遠不會真的返回任何東西時,因爲它是起始函數?當你沒有任何後續的需要等待時,它在main()下實際做了什麼? – rchkm
「如果你在a()和b()之前放置了async,你首先得到打印的b,」我不明白你的意思,你能創建一個dartpad來演示嗎? '在main中等待一個()'是爲了確保'b()'在'b()'完成之前不被調用。 'await'只允許在標有'async'的函數中使用。在await main2()中'await'''沒有太大的效果,因爲它是'main'中的最後一個語句。 –
我的意思可能是上面說得更好。您能否看到我寫的原始帖子和代碼,「在所有函數中完全取消異步函數使用異步?」 1)你能解釋爲什麼向a()和b()添加異步導致上述行爲的原因?我不明白。和(2)要完全清楚,我認爲你是說如果你不使用await,「main()異步」不會(實際上)添加任何東西。我還可以得出結論:腳本async type =「application/dart」src =「main.dart」,async並不真正添加任何東西。是對的嗎? – rchkm