Предположим, у меня есть API, который возвращает задачу в виде объекта:
private static object CreateTask()
{
return Task.Factory.StartNew(() => "Task string");
}
Мне нужно расширить API с помощью функции, которая возвращает другую задачу, связанную с задачей, возвращенной функцией CreateTask, чтобы новыйРезультат задачи будет результатом начальной задачи.Т.е. что-то вроде этого:
private static object WrapTask(dynamic task)
{
object new_task = task.ContinueWith(parentTask => parentTask.Result, TaskContinuationOptions.ExecuteSynchronously);
return new_task;
}
Пример использования:
var task = (Task<string>)WrapTask(CreateTask());
Console.WriteLine(task.Result);
должен печатать строку "Task string".
Проблема с функцией WrapTask заключается в том, чточто компилятор отказывается принять эту конструкцию:
object result = task.ContinueWith(parentTask => parentTask.Result, TaskContinuationOptions.ExecuteSynchronously);
со следующей ошибкой:
Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type
Буду признателен за любые идеи о расширении API описанным способом.