您的建議是可行的,但需要一些思考。如果你有多個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
對象)。
有一點值得思考,但它是可行的。
也許一個靜態'class.variable'就是要走的路。 –