Dart 尝试关闭池和查询时出现套接字错误

Dart 尝试关闭池和查询时出现套接字错误,dart,dart-async,sqljocky,Dart,Dart Async,Sqljocky,当我在关闭查询后很快关闭池时,会遇到此异常: Uncaught Error: Bad state: Cannot write to socket, it is closed Stack Trace: #0 BufferedSocket.writeBufferPart (package:sqljocky/src/buffered_socket.dart:114:7) #1 BufferedSocket.writeBuffer (package:sqljocky/src/buf

当我在关闭查询后很快关闭池时,会遇到此异常:

Uncaught Error: Bad state: Cannot write to socket, it is closed
Stack Trace: 
#0      BufferedSocket.writeBufferPart (package:sqljocky/src/buffered_socket.dart:114:7)
#1      BufferedSocket.writeBuffer (package:sqljocky/src/buffered_socket.dart:108:27)
#2      _Connection._sendBufferPart (package:sqljocky/src/connection.dart:261:31)
#3      _Connection._sendBuffer (package:sqljocky/src/connection.dart:249:29)
#4      _Connection.processHandler (package:sqljocky/src/connection.dart:289:16)
#5      ConnectionPool._closeQuery.<anonymous closure> (package:sqljocky/src/connection_pool.dart:220:29)
#6      _rootRunUnary (dart:async/zone.dart:730)
#7      _RootZone.runUnary (dart:async/zone.dart:864)
#8      _Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:488)
#9      _Future._propagateToListeners (dart:async/future_impl.dart:571)
#10     _Future._completeWithValue (dart:async/future_impl.dart:331)
#11     _Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:393)
#12     _asyncRunCallbackLoop (dart:async/schedule_microtask.dart:23)
#13     _asyncRunCallback (dart:async/schedule_microtask.dart:32)
#14     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:128)


Unhandled exception:
Bad state: Cannot write to socket, it is closed
#0      _rootHandleUncaughtError.<anonymous closure>.<anonymous closure> (dart:async/zone.dart:713)
#1      _asyncRunCallbackLoop (dart:async/schedule_microtask.dart:23)
#2      _asyncRunCallback (dart:async/schedule_microtask.dart:32)
#3      _asyncRunCallback (dart:async/schedule_microtask.dart:36)
#4      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:128)
池立即关闭,它立即关闭套接字。这意味着查询关闭(由于将来的原因延迟到池关闭之后)失败,无法通过套接字发送所需的任何信息。我已经在打开了一张sqljocky的票证,但没有收到任何回复,如果需要一段时间才能得到回复,我需要一个变通方法

此代码允许我在100%的时间内复制问题:

Future\u putMethod(重新请求请求){
返回新的Future.sync(){
mysql.ConnectionPool-pool=getConnectionPool();
return pool.prepare(“SELECT*FROM files”)。然后((mysql.Query){
返回query.execute().then((结果){
//做点什么?
}).然后(){
此._log.info(“关闭”);
query.close();
});
}).然后(){
pool.close();
});
});
}

这更多的是一个问题,而不是一个答案,但我无法以一种可用的方式将此代码放在注释中

您应该确保返回每个异步调用返回的未来。 我不知道添加注释
//added return
的行是否是异步调用

如果这改变了什么,你能试着给出反馈吗

Future\u putMethod(重新请求请求){
返回新的Future.sync(){
mysql.ConnectionPool-pool=getConnectionPool();
return pool.prepare(“SELECT*FROM files”)。然后((mysql.Query){
返回query.execute().then((结果){
//做些什么?//还要确保返回异步调用的未来
}).然后(){
此._log.info(“关闭”);
return query.close();//添加了return
});
}).然后(){
return pool.close();//添加了return
});
});
}

query.close和pool.close都不返回未来。在内部,它们是异步的,但它们不能让我等待异步完成。这就是我和造物主开的罚单的目的,创造那些回报的未来。