Как создать несколько потоков в рабочей роли Windows Azure

Я хочу выполнять несколько операций в одной рабочей роли. Как создавать потоки в рабочей роли?


person Ashwani K    schedule 18.02.2011    source источник


Ответы (3)


Вы можете добавить несколько рабочих процессов в WorkerRole::OnStart(), как описано здесь http://www.31a2ba2a-b718-11dc-8314-0800200c9a66.com/2010/12/running-multiple-threads-on-windows.html

    public class WorkerRole : ThreadedRoleEntryPoint
    {
        public override void Run()
        {
            // This is a sample worker implementation. Replace with your logic.
            Trace.WriteLine("Worker Role entry point called", "Information");

            base.Run();
        }

        public override bool OnStart()
        {
            List<WorkerEntryPoint> workers = new List<WorkerEntryPoint>();

            workers.Add(new ImageSizer());
            workers.Add(new ImageSizer());
            workers.Add(new ImageSizer());
            workers.Add(new HouseCleaner());
            workers.Add(new TurkHandler());
            workers.Add(new Crawler());
            workers.Add(new Crawler());
            workers.Add(new Crawler());
            workers.Add(new Gardener());
            workers.Add(new Striker());

            return base.OnStart(workers.ToArray());
        }
    }



   internal class Striker : WorkerEntryPoint
    {
        public override void Run()
        {
            while (true)
            {
                // Do Some Work

                Thread.Sleep(100);
            }
        }
    }
person Community    schedule 17.06.2011
comment
Можете ли вы предоставить ссылку на ваше утверждение о том, что Azure убьет потоки через 30 секунд? В этом примере Microsoft они создают потоки в Role.Run() . - person Oliver Bock; 23.06.2011
comment
Это может быть проблема, связанная с моей средой, которая вызывает необработанное исключение, приводящее к сбою моих потоков. - person ; 23.06.2011

В двух словах, это ничем не отличается от любого другого консольного приложения.

person BrentDaCodeMonkey    schedule 18.02.2011
comment
На самом деле это неверно. Создание потоков с использованием Task.Factory или Thread.Start в рабочей роли Azure — это плохо, так как Azure уничтожит поток примерно через 30 секунд. - person ; 17.06.2011
comment
Инге, извини, но я уверен, что ты не прав. В Lokad уже 2 года мы работаем на Azure и Lokad.Cloud (code .google.com/p/lokad-cloud), базовая платформа, широко использует Thread.Start для создания новых потоков. - person Joannes Vermorel; 23.06.2011
comment
Да, и вычислительная мощность Azure по своей сути не убивает ни одного потока. Однако длительные соединения SQL Azure вполне могут быть уничтожены. - person BrentDaCodeMonkey; 14.07.2011

Два разных примера, которые делают это:

person Eugenio Pace    schedule 23.02.2011
comment
Обновленная ссылка будет следующей: msdn.microsoft.com/en-us/library. /ff803365.aspx (5 — выполнение фоновых задач) - person csg; 05.02.2014