С момента появления тасков в .NET прошло почти 6 лет. Однако я до сих пор вижу некоторую путаницу при использовании Task._Run_() и Task.Factory._StartNew_() в коде проектов. Если это можно списать на их схожесть, то некоторые проблемы могут возникнуть из-за **dynamic** в C#. В этом посте я попытаюсь показать проблему, решение и истоки.
Пусть у нас есть код, который выглядит так:
static async Task<dynamic> Compute(Task<dynamic> inner)
{
return await Task.Factory.StartNew(async () => await inner);
}
Вопрос : есть ли в данном примере проблема? Если да, то какая? Код компилируется, возвращаемый тип **Task** на месте, модификатор **async** при использовании **await** — тоже. Думаете, речь идет о пропущенном ConfigureAwait? Хаха! [Если интересно, тогда прошу под кат][1]
[1]:
https://habrahabr.ru/post/280234/#habracut