我目前有类似的东西
Future<bool> checkAvailability(String email) async {
var client = new http.Client();
var response = await client.get(host);
bool result;
if (response.statusCode == 404) {
result= true;
}
else if (response.statusCode == 200) {
result= false;
}
client.close();
return result;
}
我从常规的非aysnc函数调用上述方法 以这种方式
void test() {
checkAvailability(email).then((result){....}
);
}
上面代码的问题在于它的异步。根据我的理解,一旦checkAvailability
被称为在不同的线程中启动它?并且ui(主要)线程继续?我对么?
我想做的是让test
函数等待checkAvailability
的结果。我知道我可以使用await但是方法test
需要标记为async
,并且当调用此方法时,它将在不同的线程中启动。我想要的是checkAvailability
的呼叫是同步的,我不介意等待回复。
答案 0 :(得分:2)
一旦调用了checkAvailability,它就会在另一个线程中启动吗?
异步执行与线程无关,异步与事件队列https://webdev.dartlang.org/articles/performance/event-loop
一起使用
test
需要标记为async
,当调用此方法时,它将在不同的帖子中启动。
如前所述,它不会是另一个线程。在async
方法上使用test
通常可以正常工作。你为什么试图避免它?
我想要的是对checkAvailability的调用是同步的,我不介意等待响应。
如果您不关心结果,请不要等待它,尽管这也会导致调用代码在checkAvailability
完成之前继续。
我想要的是对checkAvailability的调用是同步的,我不介意等待响应。
无法从异步执行返回到同步执行。一旦进行异步调用,它就会完成,结果将始终为Future
,需要等待.then(...)
进行处理。
如果您在checkAvailability
完成时并不关心并且不需要来自异步调用的结果,则您不需要await
或使用then(...)
。只需调用方法即可。