• Как на C# реализовать асинхронную очередь задач у объекта?

    More916
    @More916 Автор вопроса
    Вроде то что нужно (По крайней мере выглядит так как хотелось). Буду пробовать.
    По хорошему, DoSomething должен быть async, и в теле содержать вызовы асинхронных операций с префиксом await.

    Вот как раз таки и хотелось, что бы очередь тасков была именно в HardWorker'е. Тогда получается, я у самого HardWorker'а добавлю поле t типа Tusk и добавление задачей будет происходить уже непосредственно в методе DoSomethingAsync:
    class Program
        {
            static void Main(string[] args)
            {
                MainAsync(args).GetAwaiter().GetResult();
    
                Console.ReadKey();
            }
    
            static async Task MainAsync(string[] args)
            {
                HardWorker hardWorker1 = new HardWorker();
                HardWorker hardWorker2 = new HardWorker();
                HardWorker hardWorker3 = new HardWorker();
                HardWorker hardWorker4 = new HardWorker();
                HardWorker hardWorker5 = new HardWorker();
    
                Task t2 = Task.CompletedTask;
                Task t3 = Task.CompletedTask;
                Task t4 = Task.CompletedTask;
                Task t5 = Task.CompletedTask;
    
                Random rand = new Random();
    
                for (int i = 0; i < 50; i++)
                {
                    hardWorker1.DoSomethingAsync(1, rand.Next(1, 10000)));
                    hardWorker2.DoSomethingAsync(1, rand.Next(1, 10000)));
                    hardWorker3.DoSomethingAsync(1, rand.Next(1, 10000)));
                    hardWorker4.DoSomethingAsync(1, rand.Next(1, 10000)));
                    hardWorker5.DoSomethingAsync(1, rand.Next(1, 10000)));
                }
    
                await Task.WhenAll(t1, t2, t3, t4, t5);
            }
        }
    
        public class HardWorker : AbstractHardWorker
        {
            public void DoSomething(int task, int time)
            {
                Console.Out.WriteLine("Start: " + task);
                Thread.Sleep(time);
                Console.Out.WriteLine("End: " + task);
            }
    		
        }
    
        public abstract class AbstractHardWorker
        {
            Task t;
    		
    		public AbstractHardWorker()
    		{
    			t = Task.CompletedTask;
    		}
    		
            public abstract void DoSomething(int task, int time);
    		
            public void DoSomethingAsync(int task, int time)
            {
                t = t.ContinueWith(task => this.DoSomething(int task, int time));
            }
        }

    Правда это не совсем то, о чем вы писали в комментарии к своему ответу)
  • Как на C# реализовать асинхронную очередь задач у объекта?

    More916
    @More916 Автор вопроса
    Приведенный мною пример был упрощенной моделью реальной задачи.
    В принципе, это близко к решению, которое я пытался получить, но:
    1. В методе DoHardWork необходим параметр, так как он выполняет определенные операции на основе переданного в него значения. Как передать в него параметр при таком подходе?
    2. Поскольку переданный в DoHardWork параметр преобразуется и сохраняется в массив (причем важно сохранить последовательность поступления значений), то необходимо, что бы все вызовы метода DoHardWork у конкретного Worker'а, были выполнены в той же последовательности, в которой они вызывались (добавлялись в список). Будут ли задачи в листе выполнятся последовательно или асинхронно друг от друга?
  • Как на C# реализовать асинхронную очередь задач у объекта?

    More916
    @More916 Автор вопроса
    Все задачи являются операциями считывания из файла очередного байта и выполнения с ним определенных преобразований (с последующим добавление в массив). Разве могут несколько потоков считывать один и тот же файл?
  • Как на C# реализовать асинхронную очередь задач у объекта?

    More916
    @More916 Автор вопроса
    Ну так я же так в вопросе и написал, не?
    Как решить данную задачу с использованием task'ов и модификаторов await/async?

    P.S. а приведенную вами статью, я уже читал, как и некоторые другие, но прийти к решению своей задачи, основываясь на данной информации я так и не смог.
  • САПР субмикронных элементов и интегральных схем?

    More916
    @More916
    Ссылка уже не работает, не могли бы вы обновить ссылку?
  • Как центрировать и подогнать размеры изображения?

    More916
    @More916 Автор вопроса
    Да, так помогло.
    Добавил только для transform дубликаты с приставками -moz-, -ms-, -webkit- и -o- в надежде на повышение "кросс-браузерности".
  • Как центрировать и подогнать размеры изображения?

    More916
    @More916 Автор вопроса
    Изображение на центрируется по вертикали. А так же размер 90% срабатывает только по ширине, но не работает по высоте
  • Как создать установку приложения(сайта) на php?

    More916
    @More916 Автор вопроса
    Ну почти, а нет каких нибудь статеек на данную тему? (на хабре например^^)
    Установка скрипта - просто я хочу, чтобы было так:
    Есть папка проекта, закидываешь ее на сервер, открываешь index.php.
    А там сначала (при первом открытие) идет установка (ввод данных подключения к БД, после, скриптом, создаются таблиц и на напоследок, например, создание первого пользователя/админа).
    Затем идет редирект на тот же адрес index.php, но теперь уже тут не установка, а сам проект (его главная страница и т.д.)