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 スレッドによって呼び出されると、ロックを待機する必要があります (おそらく)。
ありがとう -マイク