Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 65
1

Асинхронное логирование

25.07.2018, 23:37. Показов 1894. Ответов 3

Author24 — интернет-сервис помощи студентам
Доброго времени.

Пишу небольшой метод, который забирает данные и записывает их в файл. Запрос данных происходит с настраиваемой задержкой.
Пока додумался только до такого решения

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
        private async void StartMonitoring_Click(object sender, RoutedEventArgs e)
        {
            CancellationToken token = cancelTokenSource.Token;
            MonitoringSettings ms = new MonitoringSettings();
            ms.ShowDialog(); //доп. функция с выбором настроек
            
            LoggingTask = new Task(async () => await Monitoring(ms, token));
            LoggingTask.Start();               
        }
 
        static async T​ask Monitoring(MonitoringSettings ms, CancellationToken token)
        {
            var res = ms.GetSettings(); //получаем разные настройки
            string fileName = res.pathLog; 
 
            var isWrite = true;
            while (isWrite)
            {
                   var str_frame = string.Format("[{0}:{1}.{2}]", DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
                
                    if (res.isRam)
                    {
                        str_frame += string.Format("pckg use ram: {0}", GetMemInfo(res.pckg));
                    }
 
                await WriteLog(fileName, str_frame); // пишем в файл
                await Task.Delay(5000); // делаем задержку
 
                if (token.IsCancellationRequested)
                {
                    isWrite = false; // выходим когда нужно
                }
            }
        }
 
        static async T​ask WriteLog(string path, string text)
        {
            using (StreamWriter outputFile = new StreamWriter(path, append: true))
            {
                Console.WriteLine(text);
                await outputFile.WriteAsync(text);                
            }
        }
Возможно ли это упростить? Может написал лишнего.
Давно не брал в руки с#, некоторые вещи подзабыл)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2018, 23:37
Ответы с готовыми решениями:

Асинхронное выполнение
Здравствуйте имеется простой метод, который посылает запрос на сервер и получает ответ,...

Асинхронное программирование
Здравствуйте. Написал класс для работа с API сайта, и он работает, что крайне странно, потому что в...

Асинхронное клиент серверное приложение
Всем доброго времени суток, а так же спасибо всем кто загляну и не прошёл мимо. Сразу...

Асинхронное программирование await async
Всем привет! Пытаюсь разобраться с асинхронным вызовом методов. Узнал такую вещь: если...

3
Эксперт .NET
17791 / 12942 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
26.07.2018, 01:54 2
Ну в первом методе непонятный фортель с асинхронным вызовом.
Зачем создавать отдельную задачу, которая асинхронно ожидает другую задачу, и потом асинхронно ожидать эту созданную задачу?
Масло масляное какое-то получается.

Зачем во втором методе переменная isWrite? Почему в условии while просто не проверять токен на отмену? К чему посредник?

Открывание/закрывание файлового потока на каждую запись - это уже на ваше усмотрение
0
127 / 107 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
26.07.2018, 06:48 3
если вам для работы а не тренироваться используйте уже готовое решения например NLog
0
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 65
26.07.2018, 09:05  [ТС] 4
kolorotur, Спасибо! Насчёт отмены полностью согласен) насчёт масла масляного тоже думал, но единственный вариант, где получилось сделать задержку, без второго асинка он не обращал внимание на Delay и записывал все сразу. Избавился от второго метода, внес запись в первый

Wolflind, Спасибо! Обязательно посмотрю его
0
26.07.2018, 09:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.07.2018, 09:05
Помогаю со студенческими работами здесь

Клиент-Серверное приложение, асинхронное программирование
Здравствуйте, это мой первый опыт в написании приложений такого плана, но я прочитал уже довольно...

Как написать асинхронное лямбда-выражение?
Вопрос в заголовке.

Что такое синхронное и асинхронное выполнение операций
Объясните пожалуйста, что такое синхронное и асинхронное выполнение операций ? :scratch:

Синхронное и асинхронное чтение в Windows Forms Application
Доброго времени суток. Интересует простой вопрос. Мне нужно читать данные с usb-устройства,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru