Updateгде/как я могу определить, использует ли класс .net IOCP?
Я задал неправильный вопрос, перефразировали (на основе большой информации о ответах и комментариях):
Есть ли хороший источник по операциям асинхронной .net бытия реального асинхронные, таким образом, либо IOCP или async (перекрывается)? Есть ли какой-нибудь быстрый способ узнать, работают ли несколько классов?
Example of not trusting framework developers blindly
естественная отправная точка для создания FileStream является статическим методом File.Open(), документация, для которой ничего не упоминает о синхронности FileStream, который создается! Также вы не можете предоставить FileOptions (которые используются для указания волшебного флажка FileOptions.Asynchronous).
Вместо этого FileStream создается с помощью FileOptions.None. Любые асинхронные операции легко подделываются обязательной реализацией базового класса Stream, который просто переносит соответствующий синхронный метод в делегат и вызывает его в пуле потоков с использованием метода BeginInvoke().
Это отклонение от обычной философии дизайна «ямы успеха», где все в .NET, похоже, работает так, как вы думаете, без необходимости внимательно читать документацию и/или постепенно обнаруживать неясные уловы и gotchas со временем.
Я пытался найти информацию об использовании IO Completion Ports в .NET
.
Есть ли хороший способ узнать, использует ли данный класс .NET Поля ввода-вывода IO? (Без необходимости запускать некоторые тесты каждый раз, когда вы используете новый класс.
Я попробовал документацию MSDN для некоторых классов и методов, и я не мог найти что-нибудь на нем.
Еще лучше, если бы есть список, содержащий список классов с использованием IOCP.
Вы планируете избегать таких классов/методов? Или обнять их? Какую ценность вы получаете, зная, если они выполняют свои договорные обязательства? –
Embrace. Причина, по которой я смотрю на это, связана с существующим дизайном, который имеет свои собственные потоки и * не * использование.net async. Разумеется, существуют различные аргументы, которые распространяются вокруг, но главная из них заключается в том, что при вызове в async .net это похоже на то, что касается потока. Пополнение портов ввода-вывода изменяется. Конечно, реальный ответ на это предполагает более подробные измерения и в зависимости от этого, устанавливая «Доказательство концепции» и сравнивая. Производительность кода постоянно улучшается, но это область, которая не изучалась. – eglasius
Я не знаю ни одного обстоятельства (так же как ответ @ usr), где асинхронные API ввода-вывода не делают этого. И я бы ожидал, если вы найдете API ввода-вывода в платформе .NET, который * не * использует их, это для разумной причины (хотя я признаю, что это нигде не документировано). Что вам нужно сделать, так это «подняться на уровень» - доверять разработчикам фреймворка «делать правильные вещи» и полагаться на абстракции, которые выставлены на этом уровне, - и перестать беспокоиться о том, как они достигли их , пользовательские примитивы нижнего уровня. –