roa*_*oul 5 .net c# asynchronous
我对IOCP有所了解,但我对APM有些困惑.
static FileStream fs;
static void Main(string[] args)
{
fs = new FileStream(@"c:\bigfile.txt", FileMode.Open);
var buffer = new byte[10000000];
IAsyncResult asyncResult = fs.BeginRead(buffer, 0, 10000000, OnCompletedRead, null);
Console.WriteLine("async...");
int bytesRead = fs.EndRead(asyncResult);
Console.WriteLine("async... over");
}
static void OnCompletedRead(IAsyncResult ar)
{
Console.WriteLine("finished");
}
Run Code Online (Sandbox Code Playgroud)
我想知道,IO线程异步执行的读取操作是什么?还是线程池中的工作线程?
和回调函数一样OnCompletedRead,它是否也由CLR线程池中的IO线程执行?
这两个线程是同一个吗?如果没有,则生成两个线程,一个执行读取操作,另一个执行回调.
如果你没有在BeginRead中使用AsyncCallback参数,那么只有一个线程在你的程序中运行代码.这使用IO完成端口通过在IO线程池中的线程上运行少量代码来完成IO完成时的信号,以更新操作的状态.当您调用EndRead时,它将阻止当前线程,直到IO操作完成.它是异步的,当你开始读取操作时,当前线程除了等待IO硬件执行读取操作之外不需要做任何事情,所以你可以在此期间做其他事情,然后决定你想什么时候停止并等待IO完成.
如果确实传入了AsyncCallback,那么当IO操作完成时,它将在IO线程池线程上执行少量代码,这将触发您的回调方法在.NET线程池的线程上执行.
| 归档时间: |
|
| 查看次数: |
295 次 |
| 最近记录: |