regarding the design of throwing exception in the finalizer thread on unobserved exceptions, this may well make sense but since it is potentially really dangerous, it needs to be much better highlighted and formalised in the MSDN documentation for the Task class and in the Task parallelism section.
I think that a complex enough area would warrant a formal (check-)list of rules to adhere to, e.g..:
- Tasks must always be observed. If a task is faulted and that is not observed, an exception will be thrown by the finalizer thread at a potentially much later point in time. For more details see http:/....
- Tasks are disposables and thus needs to be disposed. (OR) Even though Tasks are disposables, they don't need to be disposed and doing so is a null operation.