我有一个可移植的类库,它针对一切。因此,没有任务或异步支持..这是非常痛苦的。
所以,我正在尝试实现一个通用扩展方法,以便操作可以超时。这就是我到目前为止所做的:
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;
}
这似乎很可能虽然错了,但却非常难看。有没有更好的办法?
答案 0 :(得分:3)
public static bool WithTimeout(Action task, int duration)
{
var e=new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem((o) =>
{
task();
e.Set();
});
return e.WaitOne(duration);
}
答案 1 :(得分:1)
如果您想要异步和任务支持,我强烈建议您查看Microsoft BCL库。它与Portable Class Libraries兼容。
只需用nuget搜索它。