J'ai lu sur différents sites web que Thread.Abort n'est pas très bon à utiliser. Dans ce cas, comment implémenter un modèle de délai d'attente ? Par exemple, j'ai lu que MS utilise le modèle ci-dessous (que j'ai enveloppé dans une méthode d'extension) dans l'ensemble du cadre. Personnellement, je pense que c'est une extension plutôt cool, mais je suis inquiet à propos de Thread.Abort. Quelqu'un a-t-il une meilleure solution ?
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;
}
}