Информация об изменениях

Сообщение 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() то блокировок не должно быть
Re[4]: Почему не следует смешивать async-await и lock?
Здравствуйте, Sinix, Вы писали:

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() то блокировок не должно быть