System.IO.File
有一系列Read...Async()
方法,所有方法都返回Task<byte[]>
或Task<string>
(Task<T>
是 .NET 的等同于 Java的 Future<T>
)。
这看起来与AsynchronousFileChannel
API(它们消耗CompletionHandler
或返回Future
)基本相同,但有一个主要区别。
AsynchronousFileChannel
使用托管后台线程执行异步I / O(该线程可以由默认线程池(sun.nio.ch.ThreadPool
)提供,也可以由通道期间显式指定的ExecutorService
提供创作)。FileStream
实现将FileOptions.Asynchronous
标志传递给基础操作系统(另请参见Synchronous and Asynchronous I/O),但不会产生所有托管后台线程,并使用所谓的Overlapped I/O。java.nio.channels.SelectableChannel
实现?如果没有,技术限制是什么?答案 0 :(得分:1)
这是不可能的。整个IO API必须重新实现。 NIO表示非阻塞I / O,它与异步I / O不同。非阻塞是在JAVA中实现的,长话短说,这意味着OS无法通知运行时操作已完成。 Isned Java使用select()
或poll()
系统调用来检查数据是否可用。
我可以谈谈,但是偷照片要花100个字:
这就是为什么在JAVA中需要单独的线程来不断调用check,check,check,check .....
我不知道.NET平台,但是如果发布的内容正确,则使用异步I / O,所以最后一列。但是我不相信来自微软的任何东西。
希望它能回答您的问题。另外,我在这里还有其他阅读材料: https://stackoverflow.com/a/2625565/8951886