Я запутался в асинхронных операциях ввода-вывода. В this article Стивен Клири объясняет, что мы не должны использовать Task.Run(() => SomeIoMethod())
, потому что действительно асинхронных операций следует использоватьHttpClient предоставляет не действительно асинхронные операции?
стандарт P/Invoke асинхронная система ввода/вывода в .NET
http://blog.stephencleary.com/2013/11/there-is-no-thread.html
Однако, избегайте «поддельной асинхронности» в библиотеках. Фальшивая асинхронность - это когда компонент имеет API с асинхронным контентом, но он реализован только , обертывающий синхронный API в потоке пула потоков. То есть контрпродуктивная масштабируемость на ASP.NET. Одним из ярких примеров поддельной асинхронности является Newtonsoft JSON.NET, отличная библиотека . Лучше не называть (поддельные) асинхронные версии для сериализации JSON; просто вызовите синхронные версии. A более сложным примером поддельной асинхронности является поток файлов BCL. Когда открыт поток файлов , он должен быть явно открыт для асинхронного доступа ; в противном случае он будет использовать фальшивую асинхронность, синхронно блокируя поток потока потока в файле, который читает и записывает.
И он советует использовать HttpClient но internaly это использовать Task.Factory.StartNew()
Означает ли это, что HttpClient
обеспечивает действительно не асинхронные операции?
Благодарим вас за информацию, Стивен. Каждый раз, когда я думаю, что я понимаю свойство 'async/await', здесь вы приходите, и я понимаю, что ничего не знаю. – VMAtm