您的建议是可行的,但需要一些思考。如果你有多个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'就是要走的路。 –