События с параллельной библиотекой задач - PullRequest
1 голос
/ 20 октября 2011

Я использую библиотеку параллелей задач .NET 4.0 для выполнения длительных задач.Долгосрочное задание имеет разные этапы, и на каждом этапе оно завершается. Я хочу записать некоторую информацию в текстовый файл или базу данных.Вместо того, чтобы вызывать методы журнала на каждом этапе, я подумал об использовании шаблона издатель / подписчик, т.е. на каждом этапе какое-то событие должно запускаться из длительной задачи, а некоторый другой класс должен прослушивать эти события и регистрировать соответствующую информацию из событияобъект.

Мне не очень понятно использование событий в многопоточной среде.Это хорошая идея использовать события в TPL и как я могу это сделать?ищу несколько предложений ..

1 Ответ

0 голосов
/ 20 октября 2011

То, что вы описываете, это именно то, что представляет собой шаблон Event based Asynchronous .Который также реализуется различными классами в BCL.Например: класс WebClient имеет метод DownloadStringAsync, который запускает загрузку в другом потоке (с использованием TPL или чего-либо другого), и этот класс предоставляет DownloadStringCompleted и DownloadProgressChanged (который точно соответствует шагам, выполняемым в вашей долгосрочной задаче).В принципе, это хорошо для реализации этого шаблона.Важно помнить, что эти события будут вызываться в потоке, в котором выполнялась задача, поэтому вам необходимо убедиться, что обработчики этих событий знают об этом факте.

...