如何使用Gnome GIO以非阻塞方式通过块读取文件?

什么是以非阻塞方式和chunk-by-chunk处理GInputStream的正确方法(GIO / Glib / GTK / Gnome)?

我有一个应用程序正在下载(通过libsoup)并以块的forms处理数据流并并行执行其他操作。 我在g_input_stream_read_async上调用g_input_stream_read_async (从soup_session_send_finish接收并给它一个合理大小的块来读取(在我的情况下为2048字节)。

收到g_input_stream_read_async回调后,我想继续读取字节。 因此,第一个想法是从回调处理程序递归调用g_input_stream_read_async ,将其自身作为下一个回调传递。 但这对我来说似乎很笨拙而且不太正确(而且我不确定将目前仍在执行的回调传递给GIO是否安全)。

替代方案可能是分离线程并在调用g_input_stream_read的循环中执行常规的阻塞读取。

但是它通常是如何在GTK / Gnome世界中完成的? 什么是正确的方法? 任何简单的工作示例(最好是与GTK / Gnome相关的开发人员)都将受到赞赏。

收到g_input_stream_read_async回调后,我想继续读取字节。 因此,第一个想法是从回调处理程序递归调用g_input_stream_read_async,将其自身作为下一个回调传递。

这是有效的,效果很好。