.. highlight:: csharp Timer ===== The MetaWear firmware comes with a timer that can be used to schedule tasks on the board. Unlike using a ``Timer`` or ``Handler`` from the Android side, the MetaWear timer is only used with MetaWear commands and solely exists on the board. Scheduling a Task ----------------- Use `ScheduleAsync `_ to schedule tasks to be run in the future. Typically this is used with the forced data producer's `Read `_ function to have the board periodically request data from that producer. :: // send a read command to the dadta producer every 30 seconds, start immediately public async Task ScheduleRead(IForcedDataProducer producer) { return await metawear.ScheduleAsync(30000, false, () => producer.read()); } Task Management --------------- After scheduling a task, use the created `IScheduledTask `_ object to `Start `_, `Stop `_, and `Remove `_ the task. Furthermore, all ``IScheduledTask`` objects have a unique numerical value that is used to retieve a previously created task at any time with `LookupScheduledTask `_. :: IScheduledTask mwTask; // lookup a task with id = 0 if ((mwTask = metawear.LookupScheduledTask((byte)0)) != null) { // start the task mwTask.Start(); // stop the task mwTask.Stop(); // remove the task, id 0 no longer valid id mwTask.Remove(); }