2013-09-22 2 views
0

Мне нужно, чтобы Thread.Sleep() фактически выполнял мой раздел кода из-за ограничений скорости трафика API для стороннего API, на который я нажимаю. Я полагаю, что самый надежный способ сделать это, чтобы запустить процесс Синхронно вместо Асинхронный - я развлекал идею System.Timer, CurrentThread и т.д.Как заставить службу Windows работать синхронно, а не асинхронно?

ВОПРОС: Какой самый надежный способ обеспечить тему .Sleep() предотвращает дальнейшее выполнение всей обработки или, в общем, самый надежный способ приостановить выполнение службы Windows? Как обеспечить синхронизацию процесса?

+0

_I цифра самый надежный способ сделать это - запустить процесс синхронно - кажется, плохая идея вокруг. Контролируйте доступ к этому API и позволяйте ASP/IIS делать свой материал. –

+0

@HenkHolterman Думаю, я просто не понимаю - это то, что я пытаюсь сделать, это контролировать доступ к этому API, создавая ограничение скорости (не более 3 вызовов в секунду). –

+0

Это помогает вам фиксировать заголовок, но теперь неясно, каков фактический вопрос. Что означает «хиты» в _ensure Thread.Sleep() hits_? Получает ли Служба получение запросов? Многопоточный? И второй пункт по-прежнему относится к ASP.NET. –

ответ

1

Каждый запрос любого пользователя вашего приложения asp.net будет запускаться в своем потоке. Чтобы синхронизировать этот трафик, вы можете создать одноэлементный объект и создать метод, который использует блокировку. Блокировка фактически блокирует все потоки, пока не будет завершена текущая нить.

Так что если вы видите необходимость поставить тайм-аут, постройте блокировку и внутри установите тайм-аут. Теперь все нити должны будут ждать ...

Что-то вроде этого

public class ThreadLock 
{ 
    private static readonly object myLock; 

    public void LockTimeout() 
    { 
     // --> first thread will trigger the following code. 
     // All other threads will wait 
     // <-- HERE 
     // until the first went through 
     lock (myLock) 
     { 
      //... do some timeout work 
     } 
    } 
} 

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

+0

Причина в том, что я должен наложить ограничение скорости на API, который я вызываю (не более 3 вызовов в секунду). Async отлично, но я стараюсь, чтобы превышено не более 3 вызовов в секунду. –

+0

Это может работать при плотном использовании вызовов API. Но с 3 вызовами/сек этот сайт не будет хорошо масштабироваться. –

+0

@HenkHolterman 3 вызова в секунду просто заполняют мою базу данных. Я использую API для получения необходимых мне данных для создания функционального веб-сайта, который мне нужен. Итак, у меня будет эта служба Windows, работающая, возможно, месяц, и к концу этого времени в моей базе данных будут заполнены соответствующие данные из API. Это всего лишь начальный посев. Пользователь не будет испытывать такое взаимодействие. То, что они испытают, - это прямое взаимодействие с базой данных, которую я засеял из API. –

Смежные вопросы