Ответ 1
В вашем примере вы не управляете каким-либо состоянием. Любой пользователь может вызывать ProcessRequest
столько раз, сколько захочет в одном экземпляре, и они получат новое значение DateTime.
Но что если вы сделали это:
private DateTime _dateTime = DateTime.Now;
public void ProcessRequest(HttpContext context)
{
context.Response.Write(_dateTime);
}
Теперь вы получите тот же ответ каждый раз после создания экземпляра обработчика. Если ASP.NET не генерирует новый каждый раз.
IsReusable
может указывать, управляет ли ваш класс обработчиком любое состояние, которое доступно для совместного использования между отдельными запросами. Если он управляет состоянием, которое не подходит для совместного использования, то он вряд ли будет внешне идемпотентным или, возможно, даже не потокобезопасным. Вызов ProcessRequest
с теми же условиями ввода может не привести к тому же выводу, потому что в вашей конкретной реализации обработчика также есть некоторые переменные уровня экземпляра, которые не могут делиться, когда он определяет выход. (И на самом деле, технически ваша текущая реализация является примером этого). В этих случаях экземпляр, вероятно, не "повторно используется", и ASP.NET должен каждый раз генерировать новый экземпляр для обеспечения предсказуемости.
Итак, для случаев, когда вы не управляете состоянием, или у вас очень простые обработчики, где состояние "очевидно" (например, пример здесь), IsResuable
может показаться бессмысленным. Но если у вас есть очень сложный обработчик - возможно, тот, который поддерживает некоторое состояние, которое дорого инициализирует, но ОК для совместного использования - вы хотели бы указать ASP.NET, чтобы он повторно использовал его для повышения производительности.