У меня есть функция, подобная следующей:
public void Increment()
{
if (Count == 0)
{
AttachResource();
}
Count++;
}
Изменения в моем коде означают, что эта функция будет вызываться из нескольких потоков. Из-за природы AttachResource () эта функция должна выполняться в главном потоке.
Предположим, я изменяю функцию следующим образом:
public void Increment()
{
_dispatcher.Invoke(new Action(() =>
{
if (Count == 0)
{
AttachResource();
}
Count++;
}));
}
Нужно ли также добавлять блокировку к этому коду для обеспечения взаимоисключающего доступа по потокам? Или вызов через диспетчера естественным образом выполнит это путем сериализации нескольких вызовов в основной поток?