He leído en varios sitios web que Thread.Abort no es muy bueno para usar. En este caso, ¿cómo implementar un patrón de tiempo de espera? Por ejemplo, he leído que MS usa el siguiente patrón (que he incluido en un método de extensión) en todo el marco. Personalmente, creo que esta es una extensión genial, pero estoy preocupado por el Thread.Abort. ¿Alguien tiene una mejor manera?Patrón de tiempo de espera - ¿Qué tan malo es Thread.Abort realmente?
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;
}
}