Кэширование и очереди в то время как кеширование заполняется? - PullRequest
0 голосов
/ 09 марта 2010

Какой правильный способ кешировать объект (DataSet), а затем получить его, а когда он истекает, повторно заполнить его без серьезного сбоя в приложении ... приложение полагается на эти данные, чтобы быть там только для чтения. 1001 *

1 Ответ

1 голос
/ 09 марта 2010

Полагаю, ваша проблема в том, что для ее повторного заполнения может потребоваться некоторое время, и что вас не очень беспокоит немного устаревшие данные? В этом случае вы, вероятно, можете сделать это:

class MyClass
{
    private DataSet cached;
    private Thread repopulateThread;

    public DataSet GetDataSet() {
        lock(this) {
            if (/*cached has expired*/ && populateThread == null) {
                populateThread = new Thread(PopulateCachedValue); 
                populateThread.Start();
            }
            return cached;
        }
    }

    private void PopulateCachedValue() {
        DataSet ds = /* fetch new DataSet */
        lock(this) {
            cached = ds;
        }
        populateThread = null;
    }
}

Очевидно, это просто псевдокод, но вы должны увидеть, что происходит: когда срок действия кэшированного значения истекает, мы запускаем новый поток, чтобы получить новое значение, но пока этот поток все еще работает, мы продолжаем подать старое кэшированное значение.

Наконец, когда поток завершил свою работу, мы заменили старое кэшированное значение новым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...