3

我在 msdn 上找到了一个异步 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();

我在这里不明白的是,如果线程被显式的等待句柄阻塞,异步 IO 会产生什么意义。我一直认为异步 IO 的优点是用户/程序不必等待

4

3 回答 3

4

这只是一个例子。

在 Real World Application (TM) 中,您的代码可能正在运行 GUI 线程。而且我们都知道,在用户体验方面,阻塞 GUI 线程是致命的。

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

于 2010-03-31T08:43:02.970 回答
1

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

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

于 2010-03-31T08:43:11.540 回答
1

是的,这没有多大意义。我认为该示例的重点是演示异步调用它的语法,但是您是对的,如果您只是要阻塞,那么您首先就打败了异步调用的要点。

于 2010-03-31T08:45:27.893 回答