【问题标题】:using c#5 async for non-blocking使用 c#5 异步进行非阻塞
【发布时间】:2013-01-31 21:38:03
【问题描述】:

如果我有一个 Web 应用程序,它将对网络和数据库的调用包装在 Task<T> 中并等待它们,这应该可以防止线程阻塞,以便可以重复使用。

但是,在进行 IO 工作时,是否还有一些线程被阻塞,所以等待并没有真正的好处?

【问题讨论】:

    标签: c# async-await c#-5.0


    【解决方案1】:

    如果您只是将阻塞调用封装在 Task.Run 中,那么您是对的:没有任何好处。

    但是,如果您使用的是自然异步方法(例如,异步 HttpClient/WebClient/HttpWebRequest 方法和异步数据库方法),那么这些请求不会使用任何线程,并且您可以获得可扩展性优势.

    在 Windows 的设备驱动程序级别,所有 I/O 都是异步的。同步 API 只是方便的包装器。自然异步方法不会阻塞同步 API 上的线程;它们是基于异步 API 构建的。

    【讨论】:

    • 这些信息分散在 MSDN 和各种 SDK 中,但一些很好的资源是 Windows Internals 和 CLR 的 C#。
    猜你喜欢
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多