У меня есть количество уведомлений о событиях, происходящих каждый раз, например, файл добавляется в папку (это не мой случай, а просто аналогия для объяснения).Задачи процесса в заказе
В папку может быть добавлено любое количество файлов, мы не знаем, сколько их будет.
В настоящее время мое событие myEvent_Handler срабатывает каждый раз, когда файл добавляется
private void myEvent_Handler(object sender, SomeEvent e)
{
// I dont know how many times this event will fire
if (something == true) (1)
{
var t = Task.Run(() =>
{
DoSomething(e); (2)
});
}
}
Проблема в выше обработчика событий является состояние гонки кстати линии, отмеченной (1) и (2). Например, событие вызывается 4 раза:
- (1) истинно, (2) находится в очереди в задаче для запуска
- (1) истинно, (2) находится в очереди в задачу запустить
- (1) истинно, (2) ставится в очередь задачи для запуска
- (1) истинно, (2) ставится в очередь задачи для запуска
Теперь очередь задач имеет 4 задачи для выполнения, но они не выполняются в том же порядке. Они могут выполняться в любом порядке, т. Е. 3-> 2-> 4-> 1, но мне нужно, чтобы они выполнялись как 1-> 2-> 3-> 4 без блокировки нити пользовательского интерфейса.
Как я могу достичь этого, не блокируя поток пользовательского интерфейса?
Похоже, что очередь задач – stuartd
звучит так, как будто вы можете использовать задачу с большим количеством задач с очередью. см. это для решения: http://stackoverflow.com/questions/2293976/how-and-if-to-write-a-single-consumer-queue-using-the-tpl – muratgu
[Очередь] (https: // msdn.microsoft.com/en-us/library/system.collections.queue(v=vs.110).aspx) или, возможно, [потоковая безопасная очередь] (http://stackoverflow.com/questions/13416889/thread-safe -queue-Епдиеие-Dequeue)? –