. 2- , .NET 4.5 , GC'd, . - Continuations ( , WhenAny() , ). - :
private static void LogIfErrors(Task source)
{
if(source.Exception == null) return;
source.Exception.Handle(ex =>
{
Log.Error("#unhandled #task #error", ex);
return true;
});
return;
}
private void DoStuff()
{
var task1 = ThrowNotImplementedException();
task1.ContinueWith(LogIfErrors, TaskContinuationOptions.OnlyOnFaulted);
var task2 = ThrowDivideByZeroException();
task2.ContinueWith(LogIfErrors, TaskContinuationOptions.OnlyOnFaulted);
var firstCompleted = await Tasks.WhenAny(task1, task2).Unwrap();
}
, , , WhenAny(), ( < =.NET 4.0) .