Zeph (./269) :
Pour .NET c'est un peu n'importe quoi. Ils ont commencé à mettre des callbacks partout, sauf qu'ils ne savaient pas trop comment faire entrer synchrone et asynchrone dans les mêmes APIs du coup on a des "IAsyncResult" qui ne ressemblent à rien avec une douzaine de propriétés pour savoir si un truc a été fini de façon synchrone, s'il a été lancé, s'il tourne toujours, s'il faut l'attendre ou s'il va nous rappeler quand il aura fini.
Ouais, c'est le Modèle asynchrone « préhistorique », il était chiant à utiliser et pas joli, mais il fonctionnait très bien, moyennant ses défauts (pollution du heap)
Ensuite on a eu les Task, sauf qu'ils ont voulu comme d'habitude être compatibles avec tout l'historique donc c'est pareil : on a des Task qui sont à la fois des futures, des promises, des machins qui ressemblent à des WaitHandle sur lesquels on peut faire "Wait()" et tout un tas d'autres méthodes obscures.
Heu ouais, mais à te lire j'ai presque l'impression que tu tu reproches au truc d'être un couteau suisse fonctionnel plutôt qu'un couteau de cantine qui ne coupe pas

Sachant qu'on est en environnement .NET, l'intérêt principal de la chose est que ça s'intègre parfaitement avec le reste.
Certes, Task implémente IAsyncResult, mais a ne mange pas de pain, et si tu ne le sais pas, tu ne le vois pas. (C'est utile, ça t'évite d'implémenter un IAsyncResult toi-même… Cela dit je peux concevoir que ce soit un aspect de Task peut reluisant, n'étant pas moi-même très fan des IAsyncResult)
Ensuite, Task représente comme son nom l'indique une tâche (avec ou sans résultat), c'est à dire un truc qui se passe ailleurs. T'as effectivement deux types de tâches, un qui représente l'exécution de code sur un thread quelconque, et un qui représente juste l'état d'opération d'une opération. Au final, quel que soit l'origine de ta tâche, c'est transparent pour l'utilisateur de l'objet, ce qui est l'intérêt principal de la chose. (Et c'est pas parce que ça piétine allègrement les frontières de classification de certains que ça veut dire que c'est mal fichu…)
Ensuite, ta tâche implémente Wait… Ouais, ça semble un gros défaut comme ça… Sauf qu'en réalité, c'est quand même occasionnellement bien pratique. Notamment le fait qu'un appel de .Wait() (ou de .Result equivalent, le cas échéant) exécute automatiquement la tâche en mode synchrone lorsque c'est possible. (Oui, ça a l'air vraiment couillon, mais y'a des cas où c'est (très)pratique.)
Le fait que la tâche fournisse un WaitHandle (optionnel), c'est inévitable. Task, c'est quand même « un peu » l'équivalent d'un ManualResetEvent, et ce serait vraiment mal vu de ne pas fournir cette aide. (D'autant qu'un WaitHandle est un objet système, donc inter-opérable avec beaucoup de choses…)
Ne pas oublier: Multithread vs Monothread…

En fait, tu peux faire à peu près tout ce que tu veux niveau signalisation asynchrone avec les tâches, et c'est vraiment très pratique. (Je te suggère la série des
Async Coordination Primitives si tu ne l'as pas lue)
Je suis désolé mais en regardant l'API de "Task" je trouve qu'il faudrait être de sacrément mauvaise fois pour prétendre que c'est bien pensé ou élégant 
Y'a franchement pas énormément de méthode. Vu le peu qu'il y a de disponible (hors surcharges) je trouve ça d'assez mauvaise foi de dire que ce soit vraiment mal pensé…

(J'ai franchement vraiment l'impression que tu reproches au truc d'être flexible et interopérable…)
Perso si je devais reprocher un seul truc c'est Task.Factory… Je hais les « Factory » du plus profond de mon être.
P.S. : pour ton anecdote, c'est pas la première fois : Firefox n'utilisait par défaut pas les réglages internet de Windows pour aller sur internet, et encore aujourd'hui il embarque son propre cache DNS ^^
Oui, maintenant que tu le dis… M'enfin c'est juste du gros foutage de gueule quoi :/
Enfin autant Firefox, à l'époque d'IE6, où les entreprises étaient on-ne-peut-plus strictes sur la politique d'installation de navigateurs Web, c'était moins dérangeant, autant quand t'es développeur et que tu peux pas utiliser un putain d'outil de dev. sur ton poste sans faire des contorsions de malade, c'est absolument ridicule…
(Lancer une « application » avec un fichier .bat ? Mettre mon mot de passe en clair dans un fichier .bat ? Oui mais bien sûr… Bienvenue dans le monde des cavernes, la sécurité se trouve au fond de mon cul…)
./275 > Mais Node.js / Atom sont
modernes… :/
flanker (./279) :
Tu devrais jouer avec ExtJS ^^
ExtJS…
