Асинхронное выполнение задания и управление состоянием задания с использованием C # - PullRequest
1 голос
/ 14 декабря 2011

Я ищу шаблон проектирования для выполнения списка заданий, поставленных в очередь в таблице, асинхронно, а также для обновления состояния задания в базе данных (выполнено / не выполнено / отменено). желательно, чтобы я также мог убивать задание по требованию пользователя на тот случай, если задание выполняется дольше, чем ожидалось, или если пользователь по ошибке выполнил задание. каждая из этих работ требует времени для выполнения.

У меня может быть служба Windows, которая отслеживает таблицу на наличие новых заданий, а затем использует многопоточность для их асинхронного выполнения. но многопоточность сложна и подвержена ошибкам. будет ли в любом случае полезным использование услуг WCF для этой цели? например, вместо многопоточности, могу ли я иметь службу WCF для выполнения заданий и вызова ее асинхронно, а затем подписаться на завершенное событие для обновления статуса задания? какой вариант лучше или это не имеет значения? как я уже сказал, я должен иметь возможность отменить работу, а также при необходимости.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2011

Шаблон проектирования - . Потребительская очередь производителей .

Если вы реализуете очередь как структуру данных, вам нужно использовать потокобезопасную очередь.

Если вы используете таблицу базы данных для реализации очереди, то используйте атомарность СУБД, чтобы убедиться, что только один потребитель получает определенный элемент из очереди.

0 голосов
/ 14 декабря 2011

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

Извиняюсь за такой короткий ответ без примеров, я 'м и по телефону и пытаюсь кушать.

...