У меня есть приложение, которое должно выполнять следующие действия, предпочтительно в потоке GUI, поскольку именно там происходит большая часть действий и нет длительных операций:
Wait 1000
FuncA()
Wait 2000
FuncB()
Wait 1000
FuncC()
I понимаю, что я мог бы использовать таймер с функцией OnTick в стиле конечного автомата, но это кажется громоздким:
int _state;
void OnTick(object sender, EventArgs e) {
switch (_state) {
case 0:
FuncA();
_timer.Interval = TimeSpan.FromSeconds(2);
_state = 1;
break;
case 1:
FuncB();
_timer.Interval = TimeSpan.FromSeconds(1);
_state = 2;
break;
case 2:
FuncC();
_timer.IsEnabled = false;
_state = 0;
}
}
Кроме того, я хотел бы иметь возможность сделать его достаточно общим, чтобы делать что-то вроде
RunSequenceOnGuiThread(new Sequence {
{1000, FuncA}
{2000, FuncB}
{1000, FuncC}};
Есть ли идиоматический способ сделать такого рода вещи? Учитывая весь материал TPL, или Rx, или даже вычислительные выражения в F #, я бы предположил, что он существует, но я его не нахожу.