为什么dart程序在main()的最后一行之后挂起5秒?

为什么dart程序在main()的最后一行之后挂起5秒?,dart,Dart,当我运行此代码时,它会输出开始…、HTTP repsonse正文,然后完成,但在Dart进程终止之前,它似乎会等待大约5秒钟 import 'dart:io'; import 'dart:async'; import 'dart:convert'; Future<String> _sendRequest() async { var http = new HttpClient(); return http .postUrl(Uri.parse("https://w

当我运行此代码时,它会输出
开始…
、HTTP repsonse正文,然后
完成
,但在Dart进程终止之前,它似乎会等待大约5秒钟

import 'dart:io';
import 'dart:async';
import 'dart:convert';

Future<String> _sendRequest() async {
  var http = new HttpClient();
  return http
      .postUrl(Uri.parse("https://www.google.com/404"))
      .then((HttpClientRequest request) => request.close())
      .then((HttpClientResponse response) {
    return response.transform(UTF8.decoder).join("");
  });
}

main(List<String> args) async {
  print("starting...");
  print(await _sendRequest());
  print("finished");
}
导入'dart:io';
导入“dart:async”;
导入“dart:convert”;
Future\u sendRequest()异步{
var http=new-HttpClient();
返回http
.postrl(Uri.parse(“https://www.google.com/404"))
.然后((HttpClientRequest请求)=>request.close())
.然后((HttpClientResponse响应){
返回response.transform(UTF8.decoder).join(“”);
});
}
主(列表参数)异步{
打印(“开始…”);
打印(等待发送请求());
打印(“完成”);
}

为什么??最后一次
print()
结束后会发生什么?

HttpClient也需要关闭:

Future<String> _sendRequest() async {
  var http = new HttpClient();
  return http
      .postUrl(Uri.parse("https://www.google.com/404"))
      .then((HttpClientRequest request) => request.close())
      .then((HttpClientResponse response) {
    return response.transform(UTF8.decoder).join("");
  }).whenComplete(() => http.close()); // <-- ####################
}
Future\u sendRequest()异步{
var http=new-HttpClient();
返回http
.postrl(Uri.parse(“https://www.google.com/404"))
.然后((HttpClientRequest请求)=>request.close())
.然后((HttpClientResponse响应){
返回response.transform(UTF8.decoder).join(“”);

}).whenComplete(()=>http.close());//时,
HttpClient
也需要关闭:

Future<String> _sendRequest() async {
  var http = new HttpClient();
  return http
      .postUrl(Uri.parse("https://www.google.com/404"))
      .then((HttpClientRequest request) => request.close())
      .then((HttpClientResponse response) {
    return response.transform(UTF8.decoder).join("");
  }).whenComplete(() => http.close()); // <-- ####################
}
Future\u sendRequest()异步{
var http=new-HttpClient();
返回http
.postrl(Uri.parse(“https://www.google.com/404"))
.然后((HttpClientRequest请求)=>request.close())
.然后((HttpClientResponse响应){
返回response.transform(UTF8.decoder).join(“”);

}).whenComplete(()=>http.close());//我知道这个问题已经很久很久了,但也帮我找到了同样的问题。@Danny或其他任何知道的人,有没有一种方法可以让我用Observator发现这个未封闭的物体,而不必通过我的代码来寻找可能性?我不太确定,我甚至记不起我是如何找到它的。这是我一直在做的事情从那以后我就知道了!我知道这个问题由来已久,但帮助我找到了同一个问题。@Danny或其他任何知道的人,有没有一种方法可以让我用Observator发现这个未封闭的物体,而不必通过我的代码来寻找可能性?老实说,我不确定-我甚至不记得我是如何找到它的.这是我从那时起就知道的事!