Я нашел причину для этого, methinks:
Этот метод находится в классе WrappedAsyncResult, который класс MvcHandler использует через BeginProcessRequest:
public static IAsyncResult BeginSynchronous<TResult>(AsyncCallback callback, object state, Func<TResult> func, object tag)
{
BeginInvokeDelegate beginDelegate = delegate (AsyncCallback asyncCallback, object asyncState) {
SimpleAsyncResult result = new SimpleAsyncResult(asyncState);
result.MarkCompleted(true, asyncCallback);
return result;
};
EndInvokeDelegate<TResult> endDelegate = _ => func();
WrappedAsyncResult<TResult> result = new WrappedAsyncResult<TResult>(beginDelegate, endDelegate, tag);
result.Begin(callback, state, -1);
return result;
}
где «Begin» - это:
public void Begin(AsyncCallback callback, object state, int timeout)
{
bool completedSynchronously;
this._originalCallback = callback;
lock (this._beginDelegateLockObj)
{
this._innerAsyncResult = this._beginDelegate(new AsyncCallback(this.HandleAsynchronousCompletion), state);
completedSynchronously = this._innerAsyncResult.CompletedSynchronously;
if (!completedSynchronously && (timeout > -1))
{
this.CreateTimer(timeout);
}
}
if (completedSynchronously && (callback != null))
{
callback(this);
}
}
РЕДАКТИРОВАТЬ: придумали неуклюжий способ заставить действия контроллера MVC «тайм-аут», хотя механизм немного грубоват:
public class TimeoutController : Controller
{
private bool _isExecuting = false;
private int _controllerTimeout = 5000;
private Thread _executingThread;
private readonly object _syncRoot = new object();
protected override void ExecuteCore()
{
_executingThread = Thread.CurrentThread;
ThreadPool.QueueUserWorkItem(o =>
{
Thread.Sleep(_controllerTimeout);
if (_isExecuting)
{
_executingThread.Abort();
}
});
base.ExecuteCore();
}
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
_isExecuting = true;
base.OnActionExecuting(filterContext);
}
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
_isExecuting = false;
base.OnActionExecuted(filterContext);
}
public int ControllerTimeout
{
get
{
int retVal;
lock(_syncRoot)
{
retVal = _controllerTimeout;
}
return retVal;
}
set
{
lock(_syncRoot)
{
_controllerTimeout = value;
}
}
}
}
jQuery - это javascript. Я думаю, ты на правильном пути. Хорошо изучите javascript, и вы сможете лучше использовать jQuery.
Так в чем ваш вопрос? JQuery - это фреймворк , построенный на основе языка JavaScript. Чтобы уверенно использовать JQuery, вам следует познакомиться с JavaScript. JQuery содержит множество полезных шаблонов и утилит, которые маскируют несовместимость браузеров. Использование фреймворка JavaScript имеет смысл, поскольку оно позволяет сосредоточиться на вашей проблеме, а не на проблеме реализаций JavaScript в браузерах.
Для получения дополнительных сведений о фреймворках JavaScript см. Вопрос SO »Какая структура Javascript (jQuery vs Додзё против…)? «. Для изучения JavaScript изучите хорошие части .
если все, что ваш менеджер просит от вас, - это показать и скрыть некоторые элементы, или постепенно появиться и исчезнуть несколько изображений, или запросить некоторые данные через ajax и отобразить их, а затем изучить jquery и его api - это, возможно, все, что вам нужно.
но если вы (или ваш менеджер) обеспокоены производительностью, ремонтопригодностью, повторным использованием кода и в целом понимаете, что * ell происходит «там», тогда изучение самого языка будет безопасным ставка.
Я бы посоветовал взять копию JavaScript: The Definitive Guide , которая даст вам общее представление о том, что это такое и как его использовать, и многое другое. Пока вы занимаетесь этим, я также предлагаю методы Pro Javascript Джона Ресига. Этот парень действительно знает свой javascript наизнанку (работает, среди прочего, для Mozilla, автора jQuery).
Что касается jQuery, вам действительно не нужно покупать книгу. Просто просмотрите API и посмотрите его исходный код. Возможно, вы многого не поймете, но есть кое-что интересное, что заставит вас задуматься.
Вполне возможно изучить jQuery, не изучая сначала каждый бит javascript. Однако, чтобы быть продуктивным и расширить функциональные возможности плагинов и т. Д., Вам необходимо знать javascript.
Я бы посоветовал вам использовать и то, и другое. Продолжайте изучать Javascript, но если вы хотите реализовать функциональность, используйте библиотеку jQuery.
JQuery обеспечивает хороший уровень абстракции для взаимодействия с элементами DOM. С ним можно быстро и легко делать много интересного. Но, вероятно, есть много вещей, которые JQuery не сделает для вас. Для этого вам понадобится обычный JavaScript.
jQuery сделан на основе javascript. :)
Было бы очень хорошей идеей прочитать исходный код jQuery, чтобы улучшить ваше общее понимание javascript ...
Определенно изучите и то, и другое одновременно :)
Удачи и веселья.
Если у вас уже есть понимание C #, у вас будет преимущество перед изучением Javascript, и это не должно быть слишком сложно. Я бы придерживался этой книги Javascript, поскольку вам нужно знать Javascript, чтобы использовать jQuery. Когда вы освоитесь с Javascript, переходите к изучению jQuery. Документы jQuery ОЧЕНЬ полезны и могут ответить практически на любой ваш вопрос.
Удачи в изучении, оно того стоит.
jQuery устраняет необходимость во многих вредных привычках Javascript. Однако вам часто нужно знать больше, чем просто jQuery, чтобы выполнять нетривиальную работу.
Вам нужно изучить оба, но постарайтесь выработать привычки, основанные на jQuery.
Возможно, ваш начальник пытается сэкономить вам время, изучая основы Javascript, и сразу же начать изучать jQuery, но я думаю, что это плохая идея.
Понимание основ javascript является ключом к успешному использованию jQuery. jQuery предоставляет ярлыки и решения проблем (кроссбраузерные проблемы и т. д.), но это не язык сам по себе.
Мой совет, изучите javascript, узнайте об обработке событий в разных браузерах, вставке в DOM и затем начните использовать jQuery . Вы оцените это гораздо больше и станете лучшим программистом.
I would say the statement is akin to you reading a C#/VB.Net book and having your boss say "Don't bother, just learn ASP.Net". You really don't get much from the latter without the former.
что такое U делаешь? - конечно, чистый JavaScript лучше =)
Библиотеки всегда будут содержать несущественную сложность, но они могут сэкономить некоторые головные боли если они не слишком раздуты или уже присутствуют в системах конечных пользователей. Лучше всего было бы изучить javascript при использовании jquery, а затем медленно удалить костыль использования jquery. Несмотря на то, что он мощный, он добавляет значительные накладные расходы, несущественную сложность и потенциальные возможности для злоупотреблений, как и flash. Серебряных пуль нет.