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都不返回未来。在内部,它们是异步的,但它们不能让我等待异步完成。这就是我和造物主开的罚单的目的,创造那些回报的未来。