Vue-router имеет фантастический способ динамического перенаправления / проверок:
const router = new VueRouter({
routes: [
{ path: '/a', redirect: to => {
// the function receives the target route as the argument
// return redirect path/location here.
}}
]
})
Вы можете поместить проверки маршрута в эту функцию и выполнить любые необходимые проверки.
Или ... вы можете использовать полную мощность Vue-router reg-exp и записать свой путь в router.js, как этот:
/(clothes|electronics|babies)/*
Сначала - большинство классов никогда не должно будет быть ориентировано на многопотоковое исполнение. Используйте YAGNI: только примените потокобезопасность, когда Вы знаете, что на самом деле собираетесь использовать ее (и протестировать ее).
Для материала уровня метода, существует [MethodImpl]
:
[MethodImpl(MethodImplOptions.Synchronized)]
public void SomeMethod() {/* code */}
Это может также использоваться на средствах доступа (свойства и события):
private int i;
public int SomeProperty
{
[MethodImpl(MethodImplOptions.Synchronized)]
get { return i; }
[MethodImpl(MethodImplOptions.Synchronized)]
set { i = value; }
}
Примечание, что подобные полю события , синхронизировалось по умолчанию, в то время как автореализованные свойства не :
public int SomeProperty {get;set;} // not synchronized
public event EventHandler SomeEvent; // synchronized
Лично, мне не нравится реализация MethodImpl
, поскольку она блокирует this
или typeof(Foo)
- который является против лучшей практики. Предпочтительный вариант состоит в том, чтобы использовать Ваши собственные блокировки:
private readonly object syncLock = new object();
public void SomeMethod() {
lock(syncLock) { /* code */ }
}
Примечание, что для подобных полю событий, реализация блокировки зависит от компилятора; в более старых компиляторах Microsoft это lock(this)
/ lock(Type)
- однако, в более свежих компиляторах, которые это использует Interlocked
обновления - настолько ориентированный на многопотоковое исполнение без противных частей.
Это позволяет больше детализированного использования и позволяет использованию [1 111] / Monitor.Pulse
и т.д. связываться между потоками.
А имел отношение запись в блоге (позже , пересмотрел ).
static object Lock = new object();
lock (Lock)
{
// do stuff
}
c# имеет свою собственную версию "синхронизируемого" ключевого слова Java?
номер в C#, Вы явно lock
ресурсы, что Вы хотите продолжить работать синхронно через асинхронные потоки. lock
открывает блок; это не работает на уровне метода.
Однако базовый механизм подобен с тех пор lock
работы путем вызова Monitor.Enter
(и впоследствии Monitor.Exit
) на времени выполнения. Java работает тот же путь, согласно документация Sun .
Можно использовать lock
оператор вместо этого. Я думаю, что это может только заменить вторую версию. Кроме того, помните что и synchronized
и lock
потребность воздействовать на объект.