Один из моих коллег написал код, который существенно приостанавливается на 1 секунду, прежде чем сделать вызов webservice, чтобы проверить состояние значения. Этот код записывается в действие контроллера приложения MVC 4. Само действие не является асинхронным.Пауза в действии контроллера MVC
var end = DateTime.Now.AddSeconds(25);
var tLocation = genHelper.GetLocation(tid);
while (!tLocation.IsFinished && DateTime.Compare(end, DateTime.Now) > 0)
{
var t = DateTime.Now.AddSeconds(1);
while (DateTime.Compare(t, DateTime.Now) > 0) continue;
// Make the webservice call so we can update the object which we are checking the status on
tLocation = genHelper.GetLocation(tid);
}
Кажется, что это работает, но по какой-то причине у меня есть некоторые опасения по поводу его реализации. Есть ли лучший способ сделать эту задержку?
Примечание:
- Мы не используем .NET 4.5 и не изменится к этому в этом решении
- Javascript варианты сумы как SignalR не вариант в настоящее время
я имел думал, что вопрос был хорошим вариантом, но он не принял его и сказал, что это не требуется, так как то, что он сделал.
How to put a task to sleep (or delay) in C# 4.0?
Я бы переключился на ajax, чтобы запросить веб-сайт, а не блокировать поток на сервере в течение 25 секунд ... – Timmerz
Да, я порекомендую, что спасибо, но время может быть решающим для этого. Cheers – dreza
Возможно, использование .Net 4.5 уже, но я бы все же упомянул, что такое риск и Thread.Sleep. Оба блокируют поток в течение периода времени, в течение которого поток ничего не делает, но не может быть назначен для обслуживания другого запроса. Это приведет к блокировке HTTP-запросов в какой-то момент, потому что потоки не будут доступны. Когда эта точка приходит, зависит от многих факторов, а количество одновременных пользователей - только один из них, например. сайт со многими аякс-запросами на действия пользователя будет работать из потоков с меньшим количеством одновременных пользователей. Поэтому не блокируйте потоки, особенно на веб-сервере. – user3285954