У меня есть задача, которая возвращает значение, но я хочу преобразовать это значение во что-то другое (например, из string
в int
).Обычно это очень легко сделать, все, что я делаю, это добавляю задачу продолжения, которая выполняет преобразование и возвращает новый тип следующим образом:
ConverterService converter = ...;
Task<string> originalTask = Task.Factory.FromAsync<string>(...);
Task<int> conversionTask = originalTask.ContinueWith(p => converter.Convert(typeof(string), typeof(int), p.Result));
Проблема в том, что типы неизвестны :( Мне удалось создатьОригинальная задача динамически. Вот выдержка из головы:
ConverterService converter = ...;
// dynamically calling Task.Factory.FromAsync
var originalTask = FromAsyncMethodInfo.Invoke(Task.Factory, args.ToArray());
...
// now I want to dynamically call Task<string>.ContinueWith
var conversionTask = ContinueWithMethodInfo.Invoke(originalTask, ???)
Что мне теперь делать? Я ожидаю предоставить ему Func<Task<T>, U>
(что на самом деле Func<Task<string>, int>
в этом примере), но как мне сгенерировать это динамически?
Чтобы все было просто, я просто хочу знать, как динамически создавать Func<T>
во время выполнения, когда все, что у меня есть, - это переменная Type
.динамически генерируемая альтернатива лямбде, видимая в первом блоке кода:
Task<int> conversionTask = originalTask.ContinueWith(p => converter.Convert(typeof(string), typeof(int), p.Result));
Большое спасибо заранее.