Допустим, у меня есть метод, который постоянно получает входные данные каждые 10 мс, добавляет данные в Queue<T>
, другой поток отключается, выполняет некоторую обработку и запись в файл, чтобы все шло хорошо. Причина этого в том, что обработка займет больше 10 мс.
При обновлении этого метода с помощью .Net 4 я бы запустил новую задачу с опцией длительного запуска, чтобы гарантировать создание нового потока. Имейте BlockingCollection<T>
для добавления данных и в методе задачи, используйте BlockingCollection
вызов GetConsumingEnumerable
для обработки данных и записи их в файл.
Во-первых, я не совсем уверен, нужна ли мне Задача для создания нового потока или нет, но из-за моего незнания это кажется наиболее выгодным способом сделать это.
Во-вторых, с введением ключевых слов async
и await
я мог бы переписать это снова, чтобы при поступлении данных вызывать метод, помеченный async
, который выполняет обработку, а затем вызывает await FileStream.WriteAsync
. Будет ли это гарантировать, что данные, поступающие с интервалом в 10 мс, обрабатываются нормально, и нет обратного журнала? Я обнаружил, что эти новые ключевые слова не создают новые потоки, а просто как-то своевременно обрабатывают выполнение.
В моем сценарии это будет полезно для меня, или я должен продолжать создавать новые темы с помощью долго выполняющихся Task и BlockingCollection?