我想在读取新数据之前读取当前在套接字上等待的所有数据。
WinRT中的读取方法都是异步的,因此在套接字为空之前我不能简单地while
。
由于我确实要丢弃套接字上的数据,我不想使用阅读器,而是直接从套接字的IInputStream
读取数据。
像这样的伪代码:
function emptySocket(inputStream, timeout, buffer) {
if (!buffer) {
buffer = new Windows.Storage.Streams.Buffer(4096);
}
WinJS.Promise.timeout(timeout, inputStream.readAsync(buffer, 4096, Windows.Storage.Streams.InputStreamOptions.partial)
.then(function(buffer) {
if (buffer.length === 0) return;
emptySocket(inputStream, timeout, buffer);
}), function (error) {
return;
});
}
当套接字上没有任何内容时,超时就会中断等待操作。如果套接字上没有任何内容,Windows.Storage.Streams.InputStreamOptions.partial
似乎没有返回。
btw:Windows.Storage.Streams.InputStreamOptions.partial
和Windows.Storage.Streams.InputStreamOptions.readAhead
之间的区别是什么?