Моно таймер высокого разрешения (в Linux)

Я портирую приложение Windows C #, которое опрашивает на 50 мс (для последовательной связи) на Linux (используя Mono). В настоящее время мы используем ZylTimer (от ZylSoft) для генерации тиковых событий в каждом интервале, однако, поскольку эта библиотека оборачивает вызовы pInvoke в библиотеку мультимедиа Windows, мы, конечно, не можем использовать это.

   //i.e. 
        timZylComms.Tick += new ZylTimer.TickEventHandler(timZylComms_Tick);
        timTimeout.Tick += new ZylTimer.TickEventHandler(timTimeout_Tick);

Итак, это заставляет меня спросить, есть ли альтернатива, которую я могу использовать под Mono? Будет ли лучший подход к расширению класса «Секундомер» (который считается с высоким разрешением) с событием Tick?

Или есть какие-нибудь библиотеки linux, которые я могу обернуть, чтобы воспроизвести эту функциональность? Или есть какой-то другой способ добиться этого?

Ценю любые мысли по этому поводу.

РЕДАКТИРОВАТЬ: Будут ли какие-либо проблемы с этим:

internal class LinuxHiResTimer{

    internal event EventHandler Tick;
    private System.Diagnostics.Stopwatch watch;

    internal int Interval{ get; set;}
    private bool enabled;
    internal bool Enabled {
        get{ return enabled; } 
        set {
            if (value) {
                watch.Start ();
                Task.Run (tickGenerator); 
                enabled = value;
            } else {
                enabled = value;
            }
        }

    }
    private async Task tickGenerator(){
        while (enabled){
            if (watch.ElapsedMilliseconds > Interval) {
                watch.Reset ();
                if (Tick != null)
                    Tick (this, new EventArgs ());
            } else {
                float fWaitPeriod = (float)(0.8 * (Interval - watch.ElapsedMilliseconds));
                if (fWaitPeriod>20)
                    await Task.Delay(TimeSpan.FromMilliseconds(fWaitPeriod));
            }
        }
        watch.Stop ();
    }

    internal LinuxHiResTimer(){

        watch = new Stopwatch ();
    }

    ~LinuxHiResTimer(){
        watch.Stop ();
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос