Padrão Timeout - Quão ruim é Thread.Abort realmente?
Eu li em vários sites que o Thread.Abort não é muito bom de usar. Nesse caso, como você implementa um padrão de tempo limite? Por exemplo, eu li que o MS usa o padrão abaixo (que envolvi em um método de extensão) em toda a estrutura. Pessoalmente, acho que essa é uma extensão bem legal, mas estou preocupada com o Thread.Abort. Alguém tem uma maneira melhor?
public static bool CallandWait(this Action action, int timeout)
{
Thread subThread = null;
Action wrappedAction = () =>
{
subThread = Thread.CurrentThread;
action();
};
IAsyncResult result = wrappedAction.BeginInvoke(null, null);
if (((timeout != -1) && !result.IsCompleted) && (!result.AsyncWaitHandle.WaitOne(timeout, false) || !result.IsCompleted))
{
if (subThread != null)
{
subThread.Abort();
}
return false;
}
else
{
wrappedAction.EndInvoke(result);
return true;
}
}