3

UI スレッドでロックを取得するのは悪い習慣ですか? たとえば、バックグラウンド スレッドと UI スレッドの両方によって変更されているキャッシュ オブジェクトがあります。キャッシュに対するすべての変更は、ロック内にラップされます。擬似コードは次のとおりです。

 public class Cache
    {
        private readonly Dictionary<string, IEnumerable<string>> _cache;
        private readonly object _onCache = new object();
        public Cache()
        {
            _cache = new Dictionary<string, IEnumerable<string>>();
        }

        //Called by worker threads
        public void RefreshInBackground(IEnumerable<string> items, string key)
        {
            lock (_onCache)
            {
                _cache[key] = items;
            }
        }

        //Called by UI thread.Does this lead to any issues since UI thread is waiting on a lock?
        public void RefreshInForeground(IEnumerable<string> items, string key)
        {
            lock (_onCache)
            {
                _cache[key] = items;
            }
        }
    }

RefreshInForegound が UI スレッドによって呼び出されると、ロックを待機する必要があります (おそらく)。

ありがとう -マイク

4

3 に答える 3