Сообщение Re[4]: Почему не следует смешивать async-await и lock? от 10.02.2019 13:16
Изменено 10.02.2019 13:16 okon
Re[4]: Почему не следует смешивать async-await и lock?
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, okon, Вы писали:
O>>Не совсем понятно где тут проблема именно для async/await, lock вначале захвачен и ради бога, если мы в другом потоке не натыкаемся на тот же lock то как это может вызвать проблему ?
S>Упрощённо и коротко, lock построен поверх Monitor.Enter/Exit() и привязан к потоку, async-и по определению не привязаны.
Ну то есть мы получаем условно
[c#]
Monitor.Enter();
Do_State0();
case state1 :
Do_State1()
break;
case state2 :
Do_State2()
break;
...
case state2 :
Do_StateN()
break;
Monitor.Exit()
[c#]
если в Do_StateX() не вызывается Monitor.Enter() то блокировок не должно быть
S>Здравствуйте, okon, Вы писали:
O>>Не совсем понятно где тут проблема именно для async/await, lock вначале захвачен и ради бога, если мы в другом потоке не натыкаемся на тот же lock то как это может вызвать проблему ?
S>Упрощённо и коротко, lock построен поверх Monitor.Enter/Exit() и привязан к потоку, async-и по определению не привязаны.
Ну то есть мы получаем условно
[c#]
Monitor.Enter();
Do_State0();
case state1 :
Do_State1()
break;
case state2 :
Do_State2()
break;
...
case state2 :
Do_StateN()
break;
Monitor.Exit()
[c#]
если в Do_StateX() не вызывается Monitor.Enter() то блокировок не должно быть
Re[4]: Почему не следует смешивать async-await и lock?
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, okon, Вы писали:
O>>Не совсем понятно где тут проблема именно для async/await, lock вначале захвачен и ради бога, если мы в другом потоке не натыкаемся на тот же lock то как это может вызвать проблему ?
S>Упрощённо и коротко, lock построен поверх Monitor.Enter/Exit() и привязан к потоку, async-и по определению не привязаны.
Ну то есть мы получаем условно
если в Do_StateX() не вызывается Monitor.Enter() то блокировок не должно быть
S>Здравствуйте, okon, Вы писали:
O>>Не совсем понятно где тут проблема именно для async/await, lock вначале захвачен и ради бога, если мы в другом потоке не натыкаемся на тот же lock то как это может вызвать проблему ?
S>Упрощённо и коротко, lock построен поверх Monitor.Enter/Exit() и привязан к потоку, async-и по определению не привязаны.
Ну то есть мы получаем условно
Monitor.Enter();
Do_State0();
case state1 :
Do_State1()
break;
case state2 :
Do_State2()
break;
...
case state2 :
Do_StateN()
break;
Monitor.Exit()
если в Do_StateX() не вызывается Monitor.Enter() то блокировок не должно быть