关于C#使用函数作为参数的一个有关问题

关于C#使用函数作为参数的一个问题。
我现在有个while循环,我想用两种方法终止他,一是改变一个信号量,二是循环执行满一定时间比如30秒。

循环体内的语句可以任意

问题来了,每次写这个while都要写一堆datetime和timespan的东东,能不能把这个方法封装,然后参数是(bool 信号量,int 最长执行时间(秒),function 执行的方法)

好像委托可以实现?但是声明一个委托也要弄清楚委托的参数和返回值类型吧,我现在是要让任意语句块都能装入。。。

对这块不太熟,请版上大大们指点。。
------解决思路----------------------
匿名委托可以,无需匹配参数:
foo(Action a)
{
    a();
}
调用
...
foo(delegate
{
    ...
})