У меня есть этот метод WaitForReaderArrival
который, как показано ниже: (Работает все время ожидания для читателя, чтобы прибыть)Ожидание чего-то случится - асинхронная или синхронная модель?
public void WaitForReaderArrival()
{
do
{
if (ReaderArrived())
{
break;
}
System.Threading.Thread.Sleep(1000);
} while (ReaderArrived() == false);
}
И я жду для читателя, чтобы прибыть с помощью,
await Task.Run(new Action(WaitForReaderArrival));
if (ReaderArrived())
{
//Raise an ReaderArrived here!
..//blah blah
}
Один мой коллега попросил меня изменить эту строку только
WaitForReaderArrival();
if (ReaderArrived())
{
//Raise an ReaderArrived here!
..//blah blah
}
Возникает вопрос:
асинхронная модель, которую я принял выше, не очень полезно? Почему она попросила меня изменить эту линию на обычную синхронную методологию, по-прежнему остается вопросом для меня.
Что в приведенном выше правильном способе ждать, чтобы что-то произошло, а затем продолжалось?
Скорее всего, должно быть какое-то внешнее событие, которое происходит, когда «читатель приходит», как пользовательский ввод, сообщение сокета, данные о входящем последовательном порту и т. Д. Есть ли что-нибудь подобное? – Noseratio
№. Библиотека, которую я пишу, выставляет это событие и поднимается при ударе вышеописанного кода. –
Код, который вы используете, - это немного улучшенная версия [занятой очереди ожидания] (http://en.wikipedia.org/wiki/Busy_waiting), которая опроса для чего-то с дросселированием. ** Если у вас нет других способов получения уведомлений об изменении **, то разгрузка такого цикла на поток пула с 'waitait Task.Run', вероятно, является лучшей вещью, которую вы можете сделать. – Noseratio