我有一个针对所有内容的可移植类库。因此,没有任务或异步支持。这非常痛苦。
所以,我正在尝试实现一个通用的扩展方法,以便操作可以超时。这是我到目前为止所拥有的:
public static bool WithTimeout(Action task, int duration)
{
bool complete=false;
ThreadPool.QueueUserWorkItem((o) =>
{
task();
complete = true;
});
int timeout = 0;
while (!complete)
{
new ManualResetEvent(false).WaitOne(1);
timeout++;
if (timeout > duration)
{
return false;
}
}
return true;
}
这似乎很可能是错误的,而且非常丑陋。有没有更好的办法?