如果线程被阻塞,异步IO会产生什么意义(参见示例)

时间:2010-03-31 08:38:01

标签: c# .net asynchronous ftp system.net

我在msdn上找到了example异步ftp上传,它执行以下操作(摘录):

        // Asynchronously get the stream for the file contents.
        request.BeginGetRequestStream(
            new AsyncCallback (EndGetStreamCallback), 
            state
        );

        // Block the current thread until all operations are complete.
        waitObject.WaitOne();

我不明白的是,如果线程被明确的waithandle阻塞,那么异步IO会产生什么意义呢。我一直认为异步IO的优点是用户/程序必须等待。

3 个答案:

答案 0 :(得分:4)

这只是一个例子。

在Real World Application(TM)中,您的代码可能正在运行GUI线程。我们都知道,在用户体验方面,阻止GUI线程是一种杀手锏。

当异步操作完成时,它会在你的GUI中调用某种通知器,这允许用户在等待传输完成时做其他事情。

答案 1 :(得分:1)

这只能用于示例 - 使用最少的代码来显示它是如何完成的。

从上面的代码中得到的结果是主线程在等待操作结束时不使用任何CPU - 如果您使用GUI,这可能是合乎逻辑的。

答案 2 :(得分:1)

是的,它没有多大意义。我假设这个例子的目的是演示异步调用它的语法,但是你是对的,如果你只是要阻止,你首先要打败异步调用的点。