Использование SpinWait при внешнем обновлении значения
У меня есть следующий код, который хорошо работает:
while (mmf.ReadState() != MyAction.Confirmed)
{
Thread.Yield();
}
Этот код ожидает, пока другой поток обновит байт в файле с отображением памяти. После другого потока (который выполняется из другого
AppDomain
/ исполняемый файл) готов, этот код можно продолжить.
Однако если я заменю его на:
SpinWait.SpinUntil(() => mmf.ReadState() == MyAction.Confirmed);
или даже:
var spinWait = new SpinWait();
while (mmf.ReadState() != MyAction.Confirmed)
{
spinWait.SpinOnce();
}
Код висит на неопределенное время. Я знаю, что есть множество других примитивов синхронизации, которые я мог бы использовать, но это работает, пока я использую этот жесткий
while()
петля.
Почему бы не
SpinWait.SpinOnce()
имеют тот же эффект, что и
Thread.Yield()
? Могу ли я что-нибудь сделать?
SyncronizationContext
или что-то в этом роде), чтобы код мог использовать встроенный
SpinWait
класс?