【发布时间】:2016-10-10 21:38:43
【问题描述】:
我对异步 IO 操作感到困惑。在this articleStephen Cleary 解释说我们不应该使用Task.Run(() => SomeIoMethod()),因为真正的异步操作应该使用
.NET 中的标准 P/Invoke 异步 I/O 系统
http://blog.stephencleary.com/2013/11/there-is-no-thread.html
但是,请避免库中的“虚假异步”。假异步是什么时候 一个组件有一个异步就绪的 API,但它只是由 将同步 API 包装在线程池线程中。那是 对 ASP.NET 上的可伸缩性会适得其反。一个突出的例子 假异步是 Newtonsoft JSON.NET,其他方面非常出色 图书馆。最好不要调用(假)异步版本 序列化 JSON;只需调用同步版本即可。一个 假异步的更棘手的例子是 BCL 文件流。当一个 文件流打开,必须显式打开异步 使用权;否则会使用假异步,同步阻塞 文件读取和写入的线程池线程。
他建议使用 HttpClient 但内部使用 Task.Factory.StartNew()
这是否意味着HttpClient 提供的不是真正的异步操作?
【问题讨论】:
标签: c# asp.net multithreading asynchronous async-await