Ваше предложение выполнимо, но потребует некоторых размышлений.Если у вас есть несколько AJAX-запросов, то IIS будет обрабатывать эти запросы в нескольких потоках, поэтому вы находитесь в многопоточности.Это означает, что вы должны сделать доступ к состоянию сеанса потокобезопасным.Поэтому вам потребуется что-то вроде этого:
// put an instance of this class in the user's Session
class Progress
{
public object Locker { get; private set; }
public Progress()
{
Locker = new Object();
}
public int SuccessCount { get; set; }
public int FailureCount { get; set; }
public int DuplicateCount { get; set; }
}
// update the counts in the processing logic inside a lock
Progress progress = Session[ ... ];
lock( progress.Locker )
{
progress.SuccessCount = ...
progress.FailureCount = ...
progress.DuplicateCount = ...
}
// read the counts in the progress handler also inside a lock on the same object
Progress progress = Session[ ... ];
lock( progress.Locker )
{
retval.SuccessCount = progress.SuccessCount;
retval.FailureCount = progress.FailureCount;
retval.DuplicateCount = progress.DuplicateCount;
}
return retval;
Вам также придется обрабатывать случай, когда поток обработки завершает работу и удаляет объект сеанса одновременно с обработкой запроса на выполнение.Кроме того, вам, возможно, придется обрабатывать несколько потоков обработки (и, следовательно, Progress
объектов) за один сеанс.
Есть над чем подумать, но это выполнимо.