В этом посте я бы хотел поговорить о временами неправильном понимания концепции тасков. Также попытаюсь показать несколько неочевидностей при работе с **TaskCompletionSource** и просто выполненными (completed) тасками, их решение и истоки.
static Task<TResult> ComputeAsync<TResult>(Func<TResult> highCpuFunc)
{
var tcs = new TaskCompletionSource<TResult>();
try
{
TResult result = highCpuFunc();
tcs.SetResult(result);
// some evil code
}
catch (Exception exc)
{
tcs.SetException(exc);
}
return tcs.Task;
}
try
{
Task.WaitAll(ComputeAsync(() =>
{
// do work
}));
}
catch (AggregateException)
{
}
Console.WriteLine("Everything is gonna be ok");
Есть ли проблемы у кода выше вместе с примером? Если да, то какие? Вроде бы AggregateException ловим. _Everything is gonna be ok_? [Если возникли смутные сомнения, тогда прошу под кат][1]
[1]:
https://habrahabr.ru/post/280344/#habracut