Я хотел бы написать одну удобную функцию входа в систему, которую я использую для входа на периферийное устройство Bluetooth, отправив ему пароль.
public async Task<bool> LogIn()
{
bool result = false;
//First log in
var connectHook = Device.ConnectHook(BleService.Control, new Guid[] { BleCharacteristic.PasswordResult });
connectHook.Subscribe(ScanResult =>
{
ScanResult.Characteristic.DisableNotifications();
//Succesful Login
if (ScanResult.Data[0] == 1)
{
result = true;
}
//Failed Login
else
{
result = false;
}
});
await Device.WriteCharacteristic(BleService.Control, BleCharacteristic.Password, PasswordBytes);
await connectHook.FirstAsync();
return result;
}
Я хочу подписаться на характеристику результата пароля, затем написать пароль, а затем дождаться результата пароля, прежде чем вернуться из функции.
Это место, где можно использовать обещание? Я читал о них, но не понимаю их использования.
Спасибо
РЕДАКТИРОВАТЬ:
Немного покопался и подумал, что нашел хороший ответ. Я обновил код выше, чтобы отразить его, дайте мне знать, что вы думаете.
РЕДАКТИРОВАТЬ 2:
Итак, приведенный выше код не работает, потому что ничего не возвращается с
await connectHook.FirstAsync();
Если я прокомментирую эту строку, все это работает .... но кажется, что это работает, потому что у меня есть состояние гонки, и уведомление возвращается до завершения другого кода.
Функция волшебным образом ожидает этого уведомления? Я думал, что наблюдаемая реализовала IEnumerable и вернет первый элемент, если он вернулся? Я новичок в этом реактивном материале, поэтому, пожалуйста, будьте добры.